【发布时间】:2018-04-04 23:20:42
【问题描述】:
我有一张用于支持票证的表格。我正在尝试创建一个查询,显示过去 8 周的每周细分(创建了多少票)。
我已经创建了一个日历表,我正在尝试利用它来创建查询。
例子:
SELECT *
FROM dbo.Calendar
WHERE calendar_DT >= DATEADD(week, -8, GETUTCDATE() -1)
AND calendar_DT <= GETUTCDATE()
ORDER BY calendar_DT ASC
这里我有一个基本查询,它提供了过去 8 周内的所有日期。从这里开始,我尝试按周对这些数据进行分组,这样我就有了weekStart、weekEnd,然后创建了一个我将加入另一个表的记录计数。
我尝试在没有日历表的情况下执行此操作,但似乎如果某个特定周的记录不存在,那么结果中就会出现空白,而不是 0。
这是我最初的尝试。它接近我想要的最终结果。但是,我不确定 null 来自哪里,并且它缺少 2 周的数据,在此期间没有创建任何请求。
SELECT DATEADD(week, DATEDIFF(week, 0, createdDate), 0) [From],
DATEADD(week, DATEDIFF(week, 0, createdDate), 0) + 6 [To],
COUNT(DISTINCT reqID) newRequests
FROM dbo.support_tickets
WHERE createdDate >= DATEADD(week, -8, GETUTCDATE())
AND tool = 244
GROUP BY DATEDIFF(week, 0, createdDate) WITH ROLLUP
ORDER BY DATEDIFF(week, 0, createdDate)
所需的结果如上图所示,是过去 8 周中每一周创建的记录总数。
我是否需要继续使用日历表,或者是否可以在没有它的情况下完成并仍然显示to/from,即使那周没有结果?
【问题讨论】:
-
日历表的重点是查询的基础。如果您排除它,您如何建议在没有数据时从查询中返回一行?
标签: sql sql-server stored-procedures