2012-01-04 33 views
3

我从04/01/2012 00:00至05:00 2012/05/01集团通过值在凌晨4点到凌晨4点的SQL Server

让数据说

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这组数据2012/05/01 00:00,总结全天值即30

但我需要组由differen T时间

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

如何实现这一目标。任何人这样做之前...

回答

5
SUM(Value) 
... 
GROUP BY CAST(DATEADD(hour, -4, MyDateCol) AS Date) 
+0

感谢您的帮助@Michal和GBN – Madhan 2012-01-04 16:20:03

2
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 
相关问题