Группировать по значениям с 4 утра до 4 утра SQL Server - PullRequest
3 голосов
/ 04 января 2012

У меня есть данные с 01.04.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)

данные этой группы с 01.04.2012 00:00 по 05.01.2012 00:00 и суммируют значение полного дня, т.е.

но мне нужно сгруппировать по разному

т.е. 04/01/2012 04:00 - 05/01/2012 04:00, поэтому результат будет 40

как этого добиться. Кто-нибудь делал это раньше ...

Ответы [ 2 ]

5 голосов
/ 04 января 2012
SUM(Value)
...
GROUP BY CAST(DATEADD(hour, -4, MyDateCol) AS Date)
2 голосов
/ 04 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...