는 SQL 서버에서 다음과 같은
create procedure dbo.DoSummary(@startdate datetime, @enddate datetime, @dow int)
as
set DateFIRST @dow;
with cte (date) as (
select case
when datepart(dw, @startdate) = 1 then @startdate
else dateadd(d,8-datepart(dw, @startdate), @startdate)
end as date
union all
select dateadd(d,7, date)
from cte where dateadd(d,7,date) < @enddate
)
select
cte.date, count(items.opened) as [Open]
from
cte left outer join items on cte.date >= items.opened and cte.date < coalesce(items.closed, dateadd(d,1,cte.date))
group by cte.date
그런 다음 당신은 그냥
dbo.DoSummary '2001-01-01','2001-07-01', 7
이 실행하려면 실행 할 수 있습니다.
요일 @dow
컨트롤을 사용하는 마지막 매개 변수, 7은 단순히 원료로 함수 본문을 사용할 수있는 저장 프로 시저를 만들 수있는 액세스 권한이없는
영업 이익으로 UPDATE 일요일
입니다 SQL. 나는 C#에서 ADO를 사용하는 예제를 제공 할 것이다.
using (var conn = new SqlConnection(connectionString)) {
using (var cmd = conn.CreateCommand()) {
cmd.CommandText = "set DateFIRST @dow; " +
"with cte (date) as (" +
"select case " +
"when datepart(dw, @startdate) = 1 then @startdate "+
"else dateadd(d,8-datepart(dw, @startdate), @startdate) " +
"end as date " +
"union all " +
"select dateadd(d,7, date) " +
"from cte where dateadd(d,7,date) < @enddate " +
") " +
"select cte.date, count(items.opened) as [Open] " +
"from cte " +
"left outer join items " +
"on cte.date >= items.opened " +
"and cte.date < coalesce(items.closed, dateadd(d,1,cte.date)) "+
"group by cte.date ";
cmd.Parameters.AddWithValue("@startdate", new DateTime(2001,01,01));
cmd.Parameters.AddWithValue("@enddate", new DateTime(2001,04,01));
cmd.Parameters.AddWithValue("@dow", 7);
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) {
// do somthing with data
}
}
}
}
아무 것도 시도해 보셨나요? – Kaf
당신의 기술보다 위라고 생각하십니까? 그래서 지금까지 무엇을 시도 했습니까? ;-) – Darwind
몇 일요일에보고 싶습니까? 지난 달? 작년? – Jaime