SQL Server 2008的SQL Server分解日期時間的日 - 小時查詢?
declare @pardate table (pardateid int, pardatewhen datetime2(3))
insert into @pardate values (1 , '2011-09-17 12:43')
insert into @pardate values (2 , '2011-09-17 12:44')
insert into @pardate values (3 , '2011-10-11 12:45')
insert into @pardate values (4 , '2011-10-12 12:46')
insert into @pardate values (5 , '2011-10-13 12:47')
insert into @pardate values (6 , '2011-11-20 12:48')
insert into @pardate values (7 , '2011-11-21 12:49')
insert into @pardate values (8 , '2011-11-22 12:50')
declare @child table (childid int , pardateid int , childvalue char(6))
insert into @child values (1 , 1 , 'aaaaaa')
insert into @child values (2 , 2 , 'bbbbbb')
insert into @child values (3 , 3 , 'cccccc')
insert into @child values (4 , 4 , 'dddddd')
insert into @child values (5 , 5 , 'cccccc')
insert into @child values (6 , 6 , 'cccccc')
insert into @child values (7 , 7 , 'eeeeee')
insert into @child values (8 , 8 , 'ffffff')
select pardatewhen , childvalue , COUNT(childvalue)
from @child childtable join @pardate parenttable on childtable.pardateid=parenttable.pardateid
group by pardatewhen , childvalue
我試圖讓child.childvalue每一天每一個小時的@計數,所以就在我結果8760行。 第一遍有一個循環和一個CONVERT,它需要大約5分鐘才能運行實際的結果集(這只是插圖的一個示例)。我確實創建了一個CTE來製作一個日曆臨時表(使用http://www.sqlpointers.com/2006/07/generating-temporary-calendar-tables.html),並且認爲它可以以某種方式加入「空值」到結果集中。
我需要得到一個結果集,看起來像這樣
date hour count
...
2011-09-17 0 0
....
2011-09-17 12 2
....
2011-10-11 12 1
那怎麼可以高效地完成?
謝謝。
@Snowy - 如果你需要處理超過9999小時設置'MAXRECURSION'爲'0'消除遞歸的限制。 – HABO