【发布时间】:2014-04-23 18:09:55
【问题描述】:
这感觉很简单,但我在任何地方都找不到答案。
我正在尝试按每小时的时间运行查询。所以我在小时部分做一个Group By,但并不是所有的时间都有数据,所以有一些差距。我想每隔一小时显示一次,不管有没有数据。
这是一个示例查询:
SELECT DATEPART(HOUR, DATEADD(HH,-5, CreationDate)) As Hour,
COUNT(*) AS Count
FROM Comments
WHERE UserId = ##UserId##
GROUP BY DATEPART(HOUR, DATEADD(HH,-5, CreationDate))
我的想法是加入一个已经有数字 1 到 24 的表,以便将传入的数据放在它的位置。
我可以用 CTE 做到这一点吗?
WITH Hours AS (
SELECT i As Hour --Not Sure on this
FROM [1,2,3...24]), --Not Sure on this
CommentTimes AS (
SELECT DATEPART(HOUR, DATEADD(HH,-5, CreationDate)) AS Hour,
COUNT(*) AS Count
FROM Comments
WHERE UserId = ##UserId##
GROUP BY DATEPART(HOUR, DATEADD(HH,-5, CreationDate))
)
SELECT h.Hour, c.Count
FROM Hours h
JOIN CommentTimes c ON h.Hour = c.Hour
【问题讨论】:
标签: sql sql-server common-table-expression recursive-query