【发布时间】:2018-11-12 10:47:34
【问题描述】:
在过去 3 年中,我每 15 分钟获取一次间隔数据(值)。 datetimestamp 的数据类型是 datetimeoffset(7)。 每个间隔的日期时间戳必须被解释为时间段的结束。
例如,日期时间戳 2017-01-01 00:00:00.0000000 +01:00 处的值 1.96 是周期 从 2016-12-31 23:45:00.0000000 +01:00 到 2017-01-01 00:00:00.0000000 +01:00
DateTime Value
2016-12-31 23:00:00.0000000 +01:00 2.0000000000
2016-12-31 23:15:00.0000000 +01:00 1.9600000000
2016-12-31 23:30:00.0000000 +01:00 2.0400000000
2016-12-31 23:45:00.0000000 +01:00 2.0000000000
2017-01-01 00:00:00.0000000 +01:00 1.9600000000
2017-01-01 00:15:00.0000000 +01:00 2.1200000000
2017-01-01 00:30:00.0000000 +01:00 2.0800000000
2017-01-01 00:45:00.0000000 +01:00 2.0000000000
2017-01-01 01:00:00.0000000 +01:00 2.0000000000
我想知道每月的总数。下面的查询给了我错误的结果,因为 datetimestamp 2017-01-01 00:00:00.0000000 +01:00 添加到 2017 年 1 月而不是 2016 年 12 月。
SELECT Year([datetimestamp]) AS [Year],
Month([datetimestamp]) AS [Month],
Sum([value]) AS [Total]
FROM [data]
GROUP BY Year([datetimestamp]),
Month([datetimestamp])
ORDER BY [year],
[month]
【问题讨论】:
-
转换为 UTC?
-
:sigh:这就是为什么(通常)你不使用“结束”句点存储东西,而是使用“开始”句点存储。这样一来,如果您更改时间分辨率,则不需要特殊的指示符(即,如果您的分辨率达到 1 秒,@LukStorms 答案将不再有效)。它允许动态的、可变的、更容易的时期。这是因为时间(最容易被认为是)是连续的——也就是说,没有“结束”瞬间,只有开始和长度(以某种分辨率)。任何时候你记录一个“结束”,它真的是其他事情的开始......
标签: sql sql-server datetime group-by