【发布时间】:2017-01-18 13:52:17
【问题描述】:
我有一些包含日期的数据。我正在尝试按连续日期对数据进行分组,但是日期并不完全连续。这是一个例子:
DateColumn | Value
------------------------+-------
2017-01-18 01:12:34.107 | 215426 <- batch no. 1
2017-01-18 01:12:34.113 | 215636
2017-01-18 01:12:34.623 | 123516
2017-01-18 01:12:34.633 | 289926
2017-01-18 04:58:42.660 | 259063 <- batch no. 2
2017-01-18 04:58:42.663 | 261830
2017-01-18 04:58:42.893 | 219835
2017-01-18 04:58:42.907 | 250165
2017-01-18 05:18:14.660 | 134253 <- batch no. 3
2017-01-18 05:18:14.663 | 134257
2017-01-18 05:18:14.667 | 134372
2017-01-18 05:18:15.040 | 181679
2017-01-18 05:18:15.043 | 226368
2017-01-18 05:18:15.043 | 227070
数据是分批生成的,批处理中的每一行都需要几毫秒的时间来生成。我正在尝试将结果分组如下:
Date1 | Date2 | Count
------------------------+-------------------------+------
2017-01-18 01:12:34.107 | 2017-01-18 01:12:34.633 | 4
2017-01-18 04:58:42.660 | 2017-01-18 04:58:42.907 | 4
2017-01-18 05:18:14.660 | 2017-01-18 05:18:15.043 | 6
可以安全地假设,如果两个连续的行相隔超过 1 分钟,那么它们属于不同的批次。
我尝试了涉及ROW_NUMBER 函数的解决方案,但它们适用于连续日期(两行之间的日期差异是固定的)。当差异模糊时,如何达到预期的效果?
请注意,一个批处理可能比一分钟长得多。例如,一个批次可能包含从 2017-01-01 00:00:00 开始到 2017-01-01 00:05:00 结束的行,其中包含约 3000 行,每行相隔几十或几百毫秒。可以肯定的是,批次之间至少相隔 1 分钟。
【问题讨论】:
-
我们不能说“它安全吗...” - 业务或其他领域专家将是唯一可以说的人。如果分批需要每个批次的标识符并使用它
-
最后两行是否有相同的日期时间值或者是错字?
-
@vkp 这很奇怪,但不是错字。可能在 1 毫秒内插入了两行,或者实际时间四舍五入到最接近的
datetime值。
标签: sql sql-server tsql date group-by