【发布时间】:2014-07-09 13:59:03
【问题描述】:
我需要制作一个表格,其中包含从 01/01/2012 到现在的每个日期的一行,并计算每个日期当前打开的错误数量。
这是我在名为 Bugs 的表中拥有的数据:BugID、CreatedDate、UpdatedDate、Status(状态可以是打开或关闭)。如果 bug 已关闭,那么 UpdatedDate 就是它关闭的日期。如果 bug 是开放的,那么 UpdatedDate 是无关紧要的,因为 bug 开放到当前日期。
我可以列出日期,但我不知道从那里做什么。
WITH D AS
(
SELECT @RangeStartDate DateValue
UNION ALL
SELECT DateValue + 1
FROM D
WHERE DateValue + 1 < @RangeEndDate
),
【问题讨论】:
-
使用 D 作为主表 LEFT join to bugs on createDate>= D.DateValue AND (D.DateValue
-
是否有理由不将它放在行而不是列中,例如日期列和错误计数列,每天有行?
-
@xQbert 您是否建议在此之前使用 SELECT 语句?
-
下面的答案示例虽然有几个不错的选择。
-
您将从计数或数字表中获得更好的性能,而不是使用递归 cte。你所拥有的基本上是一个隐藏的循环。
标签: sql sql-server