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