我有一个数据源,其所有意图和目的都基于网络分析,表基数为 1 行 = 选定日期范围内每个日期的每小时的每分钟。有时,此数据不会返回一天中每一分钟的记录(该分钟内数据源中没有注册任何事件)。示例如下,缺失分钟为17:26和17:28:
+------------+------+--------+--------+---------+
| Date | Hour | Minute | Visits | Bounces |
+------------+------+--------+--------+---------+
| 2015-09-07 | 17 | 24 | 499 | 58 |
| 2015-09-07 | 17 | 25 | 32 | 4 |
| 2015-09-07 | 17 | 27 | 12 | 1 |
| 2015-09-07 | 17 | 29 | 6 | 0 |
+------------+------+--------+--------+---------+
出于我们的目的,我们需要将每一天等同于其完整的分钟范围,并且数据库中不应缺少这些未注册事件的记录,而应将其作为度量列为空的记录输入,这将导致输出以下内容:
+------------+------+--------+--------+---------+
| Date | Hour | Minute | Visits | Bounces |
+------------+------+--------+--------+---------+
| 2015-09-07 | 17 | 24 | 499 | 58 |
| 2015-09-07 | 17 | 25 | 32 | 4 |
| 2015-09-07 | 17 | 26 | 0 | 0 |
| 2015-09-07 | 17 | 27 | 12 | 1 |
| 2015-09-07 | 17 | 28 | 0 | 0 |
| 2015-09-07 | 17 | 29 | 6 | 0 |
+------------+------+--------+--------+---------+
我考虑过利用设置函数来包含不存在的分钟,但这会返回丢失的记录,因为实际上只是分钟,不会将日期或小时数据带入记录中,所以我得到了承认我有点难住了!
最佳答案
您可能需要一个分钟表。有一些过程可以自动创建分钟范围。看HERE需要几天的样本。
CREATE TABLE minute
([Date] datetime, [Hour] int, [Minute] int)
GO
INSERT INTO minute
([Date], [Hour], [Minute])
VALUES
('2015-09-07 00:00:00', 17, 24),
('2015-09-07 00:00:00', 17, 25),
('2015-09-07 00:00:00', 17, 26),
('2015-09-07 00:00:00', 17, 27),
('2015-09-07 00:00:00', 17, 29)
SELECT m.[Date], m.[Hour], m.[Minute],
CASE WHEN a.[Visits] is null then 0
ELSE a.[Visits]
END [Visits],
CASE WHEN a.[Bounces] is null then 0
ELSE a.[Bounces]
END [Bounces]
FROM minute m
left join analytic a
on m.date = a.date
and m.hour = a.hour
and m.minute = a.minute
关于sql - 创建时间数据中缺失的分钟记录以完成一天(每天 1440 条记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445782/