按凌晨 4 点到凌晨 4 点的值进行分组 SQL Server

发布于 2024-12-24 16:53:11 字数 565 浏览 1 评论 0原文

我有从 04/01/2012 00:00 到 05/01/2012 05:00 的数据,

假设

StartDate              Value 
04/01/2012 00:00       10 
04/01/2012 05:00       10 
04/01/2012 08:00       10

05/01/2012 01:00       10
05/01/2012 04:00       10
05/01/2012 05:00       10

我按日期进行分组,

SUM(Value)...
GROUP BY YEAR(StartDate), MONTH(StartDate),DAY(StartDate)

该组数据从 04/01/2012 00:00 到 05/01/2012 00: 00 并对全天值求和,即 30

,但我需要按不同时间进行分组

,即04/01/2012 04:00 到 05/01/2012 04:00 这样结果将是 40

如何实现这一点。以前有人这样做过...

I have data from 04/01/2012 00:00 to 05/01/2012 05:00

let say

StartDate              Value 
04/01/2012 00:00       10 
04/01/2012 05:00       10 
04/01/2012 08:00       10

05/01/2012 01:00       10
05/01/2012 04:00       10
05/01/2012 05:00       10

if I do a group by date

SUM(Value)...
GROUP BY YEAR(StartDate), MONTH(StartDate),DAY(StartDate)

this group data from 04/01/2012 00:00 to 05/01/2012 00:00 and sum the full day value i.e 30

but I need to group by different time

i.e 04/01/2012 04:00 to 05/01/2012 04:00 so that the result will be 40

how to achieve this. Anyone did this before...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

荆棘i 2024-12-31 16:53:11
SUM(Value)
...
GROUP BY CAST(DATEADD(hour, -4, MyDateCol) AS Date)
SUM(Value)
...
GROUP BY CAST(DATEADD(hour, -4, MyDateCol) AS Date)
看轻我的陪伴 2024-12-31 16:53:11
select dateadd(hh, 4, date) as date, total from (
    select
        dateadd(dd, datediff(dd, 0, dateadd(hh, -4, startDate)), 0) as date, 
        sum(value) as total
    from yourTable 
    group by dateadd(dd, datediff(dd, 0, dateadd(hh, -4, startDate)), 0)
) t

结果:

date                    total
2012-01-03 04:00:00.000 10
2012-01-04 04:00:00.000 30
2012-01-05 04:00:00.000 20
select dateadd(hh, 4, date) as date, total from (
    select
        dateadd(dd, datediff(dd, 0, dateadd(hh, -4, startDate)), 0) as date, 
        sum(value) as total
    from yourTable 
    group by dateadd(dd, datediff(dd, 0, dateadd(hh, -4, startDate)), 0)
) t

Result:

date                    total
2012-01-03 04:00:00.000 10
2012-01-04 04:00:00.000 30
2012-01-05 04:00:00.000 20
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文