sql-server - SQL Server - 指定一天中的时间进行分组

标签 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(希望“一天”是从早上 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(最后两行)

谢谢。

最佳答案

试试这个:

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

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

关于sql-server - SQL Server - 指定一天中的时间进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29003210/

相关文章:

sql - 从表到表批量插入

SQL Server - 获取排名第一的产品的总计数

mysql - SQL连接4表

sql-server - 用 JOIN 或 WITH 替换子查询

sql - 如何查看复制快照代理状态?

mysql - 如何使用 group by 加速 mysql 查询

mysql - Google Cloud MySQL 基于行的复制数据类型错误

sql-server - 查找以 GUID 作为名称的表

c# - Group By 在两个字段之间来回链接

c# - 使用 linq 进行高级分组和聚合