Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按自定义期间列出的SQL SERVER组日期时间戳_Sql_Sql Server_Datetime_Group By - Fatal编程技术网

按自定义期间列出的SQL SERVER组日期时间戳

按自定义期间列出的SQL SERVER组日期时间戳,sql,sql-server,datetime,group-by,Sql,Sql Server,Datetime,Group By,我有过去3年中每60分钟的间隔数据(Value)。时间戳的数据类型是datetimeoffset(7)。每个间隔的时间戳表示时间段的结束 例如,时间戳2016-12-31 07:00:00.0000000+01:00处的值323.459是从2016-12-31 06:00:00.0000000+01:00到2016-12-31 07:00:00.0000000+01:00的期间。以下是更多示例数据: DateTime Value 2016-

我有过去3年中每60分钟的间隔数据(
Value
)。时间戳的数据类型是
datetimeoffset(7)
。每个间隔的时间戳表示时间段的结束

例如,时间戳
2016-12-31 07:00:00.0000000+01:00
处的值
323.459
是从
2016-12-31 06:00:00.0000000+01:00
2016-12-31 07:00:00.0000000+01:00
的期间。以下是更多示例数据:

DateTime                             Value
2016-12-31 06:00:00.0000000 +01:00   314.5300000000
2016-12-31 07:00:00.0000000 +01:00   323.4590000000
2016-12-31 08:00:00.0000000 +01:00   314.3110000000
2016-12-31 09:00:00.0000000 +01:00   611.7280000000
2016-12-31 10:00:00.0000000 +01:00   507.1300000000
2016-12-31 11:00:00.0000000 +01:00   533.3160000000
2016-12-31 12:00:00.0000000 +01:00   524.4510000000
2016-12-31 13:00:00.0000000 +01:00   507.0540000000
2016-12-31 14:00:00.0000000 +01:00   498.2340000000
2016-12-31 15:00:00.0000000 +01:00   507.0230000000
2016-12-31 16:00:00.0000000 +01:00   498.1710000000
2016-12-31 17:00:00.0000000 +01:00   506.9680000000
2016-12-31 18:00:00.0000000 +01:00   506.9730000000
2016-12-31 19:00:00.0000000 +01:00   507.0090000000
2016-12-31 20:00:00.0000000 +01:00   498.2780000000
2016-12-31 21:00:00.0000000 +01:00   463.2640000000
2016-12-31 22:00:00.0000000 +01:00   507.0490000000
2016-12-31 23:00:00.0000000 +01:00   454.7290000000
2017-01-01 00:00:00.0000000 +01:00   419.7010000000
2017-01-01 01:00:00.0000000 +01:00   628.9020000000
2017-01-01 02:00:00.0000000 +01:00   541.9210000000
2017-01-01 03:00:00.0000000 +01:00   533.1670000000
2017-01-01 04:00:00.0000000 +01:00   515.5930000000
2017-01-01 05:00:00.0000000 +01:00   454.7160000000
2017-01-01 06:00:00.0000000 +01:00   445.8340000000
我想知道每个月的总数。因此2017年1月期间将使用以下日期:
2017-01-01 06:00:00.0000000+01:00
to
2017-02-01 06:00:00.0000000+01:00

2017年2月以这些日期为界:
2017-02-01 06:00:00.0000000+01:00
to
2017-03-01 06:00:00.0000000+01:00


这些都是例子。我想知道我的数据集中所有月份的总数。如何编写查询以获得按月份分组的
列的总计?

只需减去6小时,然后进行计算:

SELECT YEAR(dts_start) AS [Year],
       MONTH(dts_start) AS [Month],
       SUM([Value]) AS [Total]
FROM data CROSS APPLY
     (VALUES (DATEADD(hour, -6, datetimestamp)) as v(dts_start)
GROUP BY YEAR(dts_start), MONTH(dts_start)
ORDER BY [Year], [Month];

它怎么不起作用?这样的评论没有多大帮助。嗨,戈登,对不起,你是对的,提取7个小时就可以了。你的第一个回答是减去18小时,这不起作用。我有没有说过你很棒?:-)非常感谢。嗨@GordonLinoff,回答得很好!你能查一下我的问题吗。我真的需要你的帮助。