SQL Server - 指定分组的时间

时间:2015-03-12 06:28:59

标签: sql-server sql-server-2008-r2 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)

返回

2015-01-01 21:00:00.000 41(前8行)

2015-01-02 09:00:00.000 12(最后2行)

感谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

由于您对1天的定义是“关闭”6个月,您可以GROUP BY TimeTag - 6小时:

SELECT SUM(Value)
FROM GroupTest
GROUP BY DATEPART(DAY, DATEADD(HOUR, -6, TimeTag))

答案 1 :(得分:1)

试试这个:

SELECT SUM(value) FROM GroupTest GROUP BY DATEPART(DAY,DATEADD(hh, -6, timetag))

这是我能想到达到目标的最简单方法。

答案 2 :(得分:0)

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()))