我在[OccuredAtUtc]
中保存的数据是日期,格式如下:
-- 剧透提示:“2017-04-26”和“2017-04-29”缺失。
[OccuredAtUtc]
中的原始日期:
2017-04-24 12:16:58.5080000
2017-04-24 18:11:53.3090000
2017-04-25 18:34:18.3090000
2017-04-27 20:42:28.8570000
2017-04-28 21:10:36.7070000
2016-04-28 10:37:57.5970000
2016-04-30 10:38:55.7010000
2016-04-30 10:48:19.0390000
2016-04-31 10:48:19.2990000
.
.
.
我有这段代码,可以正确返回两个时间间隔(上周)的数据。
SELECT
[MessageType].[Name] AS [Channel],
CONVERT(VARCHAR(11), [OccuredAtUtc], 106) AS [Time],
COUNT(*) AS [Count]
FROM @table1
INNER JOIN @table2 ON ... = ...
WHERE ( [OccuredAtUtc] > '2017-04-24'
AND [OccuredAtUtc] < '2017-04-30' )
GROUP BY (CONVERT(VARCHAR(11), [OccuredAtUtc], 106)),
[MessageType].[Name]
ORDER BY [Time] ASC
但是输出结果不会显示“2017年4月26日”和“2017年4月29日”的数据行,因为在我的数据库中这些日期没有记录。 旧的输出结果:缺少4月26日和4月29日的数据。
[Channel] [Time] [Count]
------------------------------------
FTP 24 Apr 2017 7
HTTP 24 Apr 2017 9
FTP 25 Apr 2017 6
HTTP 25 Apr 2017 2
------MISSING 26 Apr--------
FTP 27 Apr 2017 56
HTTP 27 Apr 2017 12
FTP 28 Apr 2017 5
------MISSING 29 Apr--------
HTTP 28 Apr 2017 17
FTP 30 Apr 2017 156
HTTP 30 Apr 2017 19
我希望能够显示缺失日期的行,即使在这一天没有事件保存...
所以新的输出应该是这样的。
想要的输出:
[Channel] [Time] [Count]
------------------------------------
FTP 24 Apr 2017 7
HTTP 24 Apr 2017 9
FTP 25 Apr 2017 6
HTTP 25 Apr 2017 2
0 26 Apr 2017 0 -- here we go
FTP 27 Apr 2017 56
HTTP 27 Apr 2017 12
FTP 28 Apr 2017 5
HTTP 28 Apr 2017 17
0 29 Apr 2017 0 -- here we go
FTP 30 Apr 2017 156
HTTP 30 Apr 2017 19
我知道有类似于我的问题已经得到了回答,我试图重写我的代码但是失败了。
(显示两个日期之间的所有日期数据;如果特定日期没有行,则在所有列中显示零)
(如何生成两个日期之间的所有日期)