【发布时间】:2020-09-14 12:36:26
【问题描述】:
以下查询将给定的时间范围数据拆分为 5 分钟,但它从提供的时间范围开始执行此操作
With MNE
AS
(
SELECT *,DATEDIFF(dd,0,t.datetime) AS dayoffset,
DATEDIFF(ss,MIN(t.datetime) OVER (PARTITION BY DATEDIFF(dd,0,t.datetime)),t.datetime)/60 AS MinOffset
FROM cw.datas t
WHERE t.DATETIME <= GETDATE()
AND t.DATETIME > DATEADD(SECOND, -DATEDIFF(SECOND, CAST(CAST(GETDATE() AS DATE) AS DATETIME),
GETDATE()) % (60 * 5), DATEADD(DAY, - 1,GETDATE()))
)
SELECT MIN(z.datetime) AS StartDatetime,
MAX(z.datetime) AS ENdDatetime,
sum(z.value) AS TotalSum
FROM MNE z
GROUP BY dayoffset,(MinOffset-1)/10
order by StartDatetime
当前时间为2020-09-14 12:28:43.793,输出如下:
StartDatetime,ENdDatetime,TotalSum
2020-09-13 12:25:03.000, 2020-09-13 12:31:00.000, 63763.51
2020-09-13 12:31:03.000, 2020-09-13 12:36:00.000, 48348.34
2020-09-13 12:36:03.000, 2020-09-13 12:41:00.000, 54387.69
--
--
2020-09-14 12:16:00.000, 2020-09-14 12:20:57.000, 54353.72
2020-09-14 12:21:00.000, 2020-09-14 12:25:57.000, 53780.48
2020-09-14 12:26:00.000, 2020-09-14 12:28:42.000, 25328.56
我想从当前时间戳(即2020-09-14 12:28:43.793)聚合拆分到过去 24 小时。
Expected result :
StartDatetime,ENdDatetime,TotalSum
--
--
2020-09-14 11:58:43.000, 2020-09-14 12:08:43.000, 354654
2020-09-14 12:08:43.000, 2020-09-14 12:18:43.000, 354353
2020-09-14 12:18:43.000, 2020-09-14 12:28:43.000, 354665
帮助表示赞赏。
样本数据:
datas
datetime, abc, def, ghi, value
2020-09-11 12:22:36.000, AYSH, mains, SAE, 363.12
2020-09-11 12:22:39.000, AYSH, mains, SAE, 358.2
2020-09-11 12:22:42.000, AYSH, mains, SAE, 353.66
2020-09-11 12:22:45.000, AYSH, mains, SAE, 349.14
2020-09-11 12:22:48.000, AYSH, mains, SAE, 344.84
2020-09-11 12:22:51.000, AYSH, mains, SAE, 340.63
2020-09-11 12:22:54.000, AYSH, mains, SAE, 336.45
【问题讨论】:
-
可以添加示例数据和预期结果吗?
-
@Vernou 给出了样本数据
标签: sql-server datetime