sql - 创建时间数据中缺失的分钟记录以完成一天(每天 1440 条记录)

标签 sql database sql-server-2008 t-sql

我有一个数据源,其所有意图和目的都基于网络分析,表基数为 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)

SQL FIDDLE DEMO

 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/

相关文章:

php - 为每个 id 添加元值,其中 post_type = ??文字新闻

ruby-on-rails - Gem::LoadError:为数据库适配器指定了 'postgresql',但未加载 gem

sql - 为什么数字 0 计算为空格

SQL 服务器 : max date and inner join

Django:每小时重置模型的特定字段

sql-server - SQL Server 中的只读锁

sql - 错误 : syntax error at or near "AS" - What am I doing wrong?

php - 多对多关系查询。拉维尔

sql - 寻找 SQL 中的性能改进

java - 如何在 Android 中使用 Berkeley DB SQL API