【发布时间】:2020-04-13 09:17:08
【问题描述】:
我是 Microsoft SQL Server 2019 的新手。目前我正在尝试以 15 秒的间隔聚合 Timestamp(键入 datetime)。
想要的结果:
Timestamp Timestamp2
2019-01-01 04:00:00.487 2019-01-01 04:00:15.000
2019-01-01 04:00:01.487 2019-01-01 04:00:15.000
2019-01-01 04:00:02.487 2019-01-01 04:00:15.000
2019-01-01 04:00:03.487 2019-01-01 04:00:15.000
2019-01-01 04:00:04.487 2019-01-01 04:00:15.000
2019-01-01 04:00:05.487 2019-01-01 04:00:15.000
2019-01-01 04:00:06.487 2019-01-01 04:00:15.000
2019-01-01 04:00:07.487 2019-01-01 04:00:15.000
2019-01-01 04:00:08.487 2019-01-01 04:00:15.000
2019-01-01 04:00:09.487 2019-01-01 04:00:15.000
2019-01-01 04:00:10.487 2019-01-01 04:00:15.000
2019-01-01 04:00:11.487 2019-01-01 04:00:15.000
2019-01-01 04:00:12.487 2019-01-01 04:00:15.000
2019-01-01 04:00:13.487 2019-01-01 04:00:15.000
2019-01-01 04:00:14.487 2019-01-01 04:00:15.000
2019-01-01 04:00:15.487 2019-01-01 04:00:30.000
2019-01-01 04:00:16.487 2019-01-01 04:00:30.000
2019-01-01 04:00:17.487 2019-01-01 04:00:30.000
2019-01-01 04:00:18.487 2019-01-01 04:00:30.000
2019-01-01 04:00:19.487 2019-01-01 04:00:30.000
我尝试转换“1 分钟间隔” 来自
Select
Timestamp,
dateadd(MINUTE, 1+datediff(MINUTE, 0, [Timestamp]), 0) AS Timestamp2
FROM tags.dbo.jan
where ValueID = '349' and Timestamp < '2019-01-01 04:02:00.000'
到
Select
Timestamp,
dateadd(second, 15+datediff(second, 0, [Timestamp]), 0) AS Timestamp2
FROM tags.dbo.jan
where ValueID = '349' and Timestamp < '2019-01-01 04:02:00.000'
遇到一个问题
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
然后我尝试使用datediff_big
Select
Timestamp,
dateadd(second, 15+datediff_big(second, 0, [Timestamp]), 0) AS Timestamp2
FROM tags.dbo.jan
where ValueID = '349' and Timestamp < '2019-01-01 04:02:00.000'
得到错误
Arithmetic overflow error converting expression to data type int.
我尝试过使用
Select Timestamp,
datetimefromparts(year(Timestamp), month(Timestamp), day(Timestamp),
datepart(hour, Timestamp),
datepart(minute, Timestamp),
(ceiling(datepart(second, Timestamp)) / 15) * 15,
0
) as timestamp2
FROM jan.dbo.jan
where ValueID = '349' and
Timestamp < '2019-01-01 04:02:00.000';
但我有这些结果
2019-01-01 04:00:12.487 2019-01-01 04:00:00.000
2019-01-01 04:00:13.487 2019-01-01 04:00:00.000
2019-01-01 04:00:14.487 2019-01-01 04:00:00.000
2019-01-01 04:00:15.487 2019-01-01 04:00:15.000
2019-01-01 04:00:16.487 2019-01-01 04:00:15.000
2019-01-01 04:00:17.487 2019-01-01 04:00:15.000
而不是想要的
2019-01-01 04:00:12.487 2019-01-01 04:00:15.000
2019-01-01 04:00:13.487 2019-01-01 04:00:15.000
2019-01-01 04:00:14.487 2019-01-01 04:00:15.000
2019-01-01 04:00:15.487 2019-01-01 04:00:30.000
2019-01-01 04:00:16.487 2019-01-01 04:00:30.000
2019-01-01 04:00:17.487 2019-01-01 04:00:30.000
应该从前15秒组开始
【问题讨论】:
-
此解决方案可能对您有所帮助.. stackoverflow.com/questions/830792/…
-
它有效,但不是我想要的方式
标签: sql sql-server date datetime aggregate