У меня есть некоторые данные для анализа, которые на полчаса зернистости, но хотели бы сгруппировать их на 2, 3, 6, 12 и 2 дня и 1 неделю, чтобы сделать еще несколько значимые сравнения.Sql Server 2012 - Групповые данные по разным временным интервалам
|DateTime | Value |
|01 Jan 2013 00:00 | 1 |
|01 Jan 2013 00:30 | 1 |
|01 Jan 2013 01:00 | 1 |
|01 Jan 2013 01:30 | 1 |
|01 Jan 2013 02:00 | 2 |
|01 Jan 2013 02:30 | 2 |
|01 Jan 2013 03:00 | 2 |
|01 Jan 2013 03:30 | 2 |
Например. 2 часа сгруппированных результат будет
|DateTime | Value |
|01 Jan 2013 00:00 | 4 |
|01 Jan 2013 02:00 | 8 |
Чтобы получить 2 ежечасно сгруппированных результат, я думал, что этот код -
CASE
WHEN DatePart(HOUR,DateTime)%2 = 0 THEN
CAST(CAST(DatePart(HOUR,DateTime) AS varchar) + '':00'' AS TIME)
ELSE
CAST(CAST(DATEPART(HOUR,DateTime) As Int) - 1 AS varchar) + '':00'' END Time
Это, кажется, работает хорошо, но я не могу думать об использовании этого обобщить 3, 6, 12 часов. Я могу в течение 6, 12 часов просто использовать заявления о случаях и добиваться результата, но есть ли способ обобщить, чтобы я мог добиться детализации на уровне 2,3,6,12 часа, а также степени детализации на 2 дня и неделю? Обобщая, я имею в виду, что я мог бы передать переменную с желаемой детализацией в один и тот же запрос, вместо того, чтобы составлять разные запросы с разными аргументами case.
Возможно ли это? Укажите несколько указателей.
Большое спасибо!
Благодаря zero323 для улучшения форматирования. Все еще найти мой путь через SO! – devSuper
Итак, вы хотите, чтобы общий алгоритм разрезал ваши данные каждые X часов и построил кумулятивный (SUM) столбца «Значение»? – Neolisk