SQL 服务器 - 指定分组依据的时间
SQL Server - specify time of day to group by
我有这样的查询:
SELECT SUM(value) FROM GroupTest GROUP BY DATEPART(DAY,timetag)
它按照预期按天对数据进行分组。
有什么方法可以指定一天中的时间来分组吗?例如,我希望 3 月 5 日从 '2015-03-05 06:00:00'
到 '2015-03-06 05:59:00'
并分组为 2015-03-05(希望 "day" 从早上 6 点到 5:59 第二天早上。
这是如何实现的?
使用 SQL Server 2008 R2。
编辑以添加示例:
作为一个基本示例,如果我们采用以下数据:
id timetag value
1 2015-01-01 06:00:00.000 5
1 2015-01-01 09:00:00.000 5
1 2015-01-01 12:00:00.000 5
1 2015-01-01 15:00:00.000 5
1 2015-01-01 18:00:00.000 5
1 2015-01-01 21:00:00.000 5
1 2015-01-02 00:00:00.000 5
1 2015-01-02 03:00:00.000 6
1 2015-01-02 06:00:00.000 6
1 2015-01-02 09:00:00.000 6
我想要以下查询:
select sum(value) from GroupTest group by datepart(day,timetag)
到return
2015-01-01 21:00:00.000 41
(前 8 行)
2015-01-02 09:00:00.000 12
(最后两行)
谢谢。
试试这个:
由于您对 1 天的定义是 "off" 6 个月,您可以 GROUP BY
TimeTag
- 6 小时:
SELECT SUM(Value)
FROM GroupTest
GROUP BY DATEPART(DAY, DATEADD(HOUR, -6, TimeTag))
试试这个:
SELECT SUM(value) FROM GroupTest GROUP BY DATEPART(DAY,DATEADD(hh, -6, timetag))
这是我能想到的实现您的目标的最简单方法。
对于sql server 2012
SELECT SUM(value)
FROM GroupTest
GROUP BY IIF((CONVERT(TIME,GETDATE())<'05:59:00.000'),
DATEPART(DAY,(DATEADD(DAY, -1, GETDATE()))),
DATEPART(DAY,GETDATE()))
我有这样的查询:
SELECT SUM(value) FROM GroupTest GROUP BY DATEPART(DAY,timetag)
它按照预期按天对数据进行分组。
有什么方法可以指定一天中的时间来分组吗?例如,我希望 3 月 5 日从 '2015-03-05 06:00:00'
到 '2015-03-06 05:59:00'
并分组为 2015-03-05(希望 "day" 从早上 6 点到 5:59 第二天早上。
这是如何实现的?
使用 SQL Server 2008 R2。
编辑以添加示例: 作为一个基本示例,如果我们采用以下数据:
id timetag value
1 2015-01-01 06:00:00.000 5
1 2015-01-01 09:00:00.000 5
1 2015-01-01 12:00:00.000 5
1 2015-01-01 15:00:00.000 5
1 2015-01-01 18:00:00.000 5
1 2015-01-01 21:00:00.000 5
1 2015-01-02 00:00:00.000 5
1 2015-01-02 03:00:00.000 6
1 2015-01-02 06:00:00.000 6
1 2015-01-02 09:00:00.000 6
我想要以下查询:
select sum(value) from GroupTest group by datepart(day,timetag)
到return
2015-01-01 21:00:00.000 41
(前 8 行)
2015-01-02 09:00:00.000 12
(最后两行)
谢谢。
试试这个:
由于您对 1 天的定义是 "off" 6 个月,您可以 GROUP BY
TimeTag
- 6 小时:
SELECT SUM(Value)
FROM GroupTest
GROUP BY DATEPART(DAY, DATEADD(HOUR, -6, TimeTag))
试试这个:
SELECT SUM(value) FROM GroupTest GROUP BY DATEPART(DAY,DATEADD(hh, -6, timetag))
这是我能想到的实现您的目标的最简单方法。
对于sql server 2012
SELECT SUM(value)
FROM GroupTest
GROUP BY IIF((CONVERT(TIME,GETDATE())<'05:59:00.000'),
DATEPART(DAY,(DATEADD(DAY, -1, GETDATE()))),
DATEPART(DAY,GETDATE()))