我有一张用于支持票证的表格。我正在尝试创建一个查询,显示过去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
答案 0 :(得分:1)
NULL行是GROUP BY ... WITH ROLLUP的结果。这就是汇总。 newRequests值为7是您其他记录的总和。
如果您希望列出不在您的表格中的日期,您需要从其他地方获取日期,这正是日历表的用途。所以,一旦你添加了这个连接,你实际上就处于非常好的状态。