问题陈述:我在消防部门工作,正在对我的数据进行统计分析。一个问题是生成一个日历年中每天每小时的服务呼叫数量。我需要一张可以连接到一年中每一天和每天每小时的火灾事件的表。我希望的是以下内容(使用军事时间)
2017 年 1 月 1 日 00:00:00
2017 年 1 月 1 日 00:00:00
2017 年 1 月 1 日 01:00:00
2017 年 1 月 1 日 02:00:00
2017 年 1 月 1 日 03:00:00
2017 年 1 月 1 日 04:00:00
2017 年 1 月 1 日 05:00:00
2017 年 1 月 1 日 06:00:00
2017 年 1 月 1 日 07:00:00
2017 年 1 月 1 日 08:00:00
等直到年底
2017 年 12 月 31 日 21:00:00
2017 年 12 月 31 日 22:00:00
2017 年 12 月 31 日 23:00:00
年底
该表将允许我加入火灾事件表,我将能够统计计算一天中每一小时和一年中每一天的事件数量。计算表是必要的,因为火灾事故表中存在空白。例如; 1 月 1 日 0100 时、0200 时和 0300 时,没有紧急电话打进来。因此,我无法使用火灾事故表进行计算,因为没有没有电话打入时的数据。有间隙的火灾事故表如下所示:
时间间隔、事件地址
2017 年 1 月 1 日 00:00:00, 榆树街 123 号
2017 年 1 月 1 日 04:00:00, 橡树街 456 号
2017 年 1 月 1 日 05:00:00, 枫树街 789 号
(请注意,0100、0200 和 0300 时段没有火警呼叫。这些是时间间隔。)
因为数据中存在间隙,其中零应该是泊松分布所需的计算平均值缺失。平均值不正确。
期望的输出:我的目标是拥有一个包含一天中的小时表的日历,以加入我的火灾事件,以便我的结果集返回。以下是一个查询的草稿,该查询返回日历表中的每一行,如果存在匹配值,则返回火灾事件表中的行。
SELECT
TimeInterval
, COUNT(Incidents) AS [CountOfIncidents] /*this should probably be a COALESCE statement*/
FROM CalendarTable /*all rows from the calendar with hours and rows with data from FireIncidents*/
LEFT OUTER JOIN FireIncidents ON CalendarTable.timeInterval = FireIncidents.TimeInterval
GROUP BY TimeInterval
查询将返回我希望实现的目标:
时间间隔、事件计数
2017 年 1 月 1 日 00:00:00, 5
2017 年 1 月 1 日 01:00:00, 0
2017 年 1 月 1 日 02:00:00, 0
2017 年 1 月 1 日 03:00:00, 0
2017 年 1 月 1 日 04:00:00, 2
2017 年 1 月 1 日 05:00:00, 1
(请注意,0100、0200 和 0300 的时间有零次呼叫。这就是我想要的!现在我可以创建一个直方图,显示有多少个小时有零次呼叫。或者我可以计算一个平均值,其中考虑了零次呼叫一天中的部分时间。)
我尝试过的:我已经尝试了以下方法,但我无法弄清楚如何从中创建表格以及如何使其成为成品,正如您在下面的问题段落中看到的那样。
DECLARE @DayOfYearNumber INT
DECLARE @HourNumber INT
SET @DayOfYearNumber = 1
SET @HourNumber = 0
PRINT 'Year' + ', ' + 'CalendarDayOfYear' + ', ' + 'HourOfDay'
WHILE @DayOfYearNumber < 366
BEGIN
SET @HourNumber = 0
WHILE @HourNumber < 24
BEGIN PRINT '2017' + ', ' + CONVERT(VARCHAR, @DayOfYearNumber) + ' ' + CONVERT(VARCHAR, @HourNumber)
SET @HourNumber = @HourNumber + 1
END
SET @DayOfYearNumber = @DayOfYearNumber + 1
END
问题:
如何在 SQL Server 2012 中生成包含一年中的每一天和每天的每个小时的日历表。又是我的例子
2017 年 1 月 1 日 00:00:00
2017 年 1 月 1 日 01:00:00
2017 年 1 月 1 日 02:00:00
2017 年 1 月 1 日 03:00:00
2017 年 1 月 1 日 04:00:00
2017 年 1 月 1 日 05:00:00
2017 年 1 月 1 日 06:00:00
2017 年 1 月 1 日 07:00:00
2017 年 1 月 1 日 08:00:00
等直到年底
2017 年 12 月 31 日 21:00:00
2017 年 12 月 31 日 22:00:00
2017 年 12 月 31 日 23:00:00
年底