给定时间范围内的SQL Week over Week查询

时间:2018-04-04 14:57:44

标签: sql sql-server stored-procedures

我有一张用于支持票证的表格。我正在尝试创建一个查询,显示过去8周内每周一周的细分(创建了多少张票)。

我已经创建了一个日历表,我正在尝试使用它来创建查询。

示例:

SELECT *
FROM dbo.Calendar
WHERE calendar_DT >= DATEADD(week, -8, GETUTCDATE() -1)
AND calendar_DT <= GETUTCDATE()
ORDER BY calendar_DT ASC

enter image description here

这里我有一个基本查询,它给出了过去8周内的所有日期。从这里开始,我试图按周对这些数据进行分组,以便我有一个weekStartweekEnd,然后创建一个记录计数,我将加入另一个表。

我尝试在没有日历表的情况下执行此操作,但似乎如果某个特定周内没有记录,则结果中存在差距,而不是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)

enter image description here

所需结果如上图所示,为过去8周内每个记录创建的记录总数。

我是否需要继续使用日历表,或者可以在没有它的情况下完成,并且即使那周没有结果,仍然会显示to/from

1 个答案:

答案 0 :(得分:1)

NULL行是GROUP BY ... WITH ROLLUP的结果。这就是汇总。 newRequests值为7是您其他记录的总和。

如果您希望列出不在您的表格中的日期,您需要从其他地方获取日期,这正是日历表的用途。所以,一旦你添加了这个连接,你实际上就处于非常好的状态。