SQL — суммирование событий по дате (5 дней за раз)

Я пытаюсь рассчитать количество событий колл-центра за скользящий 5-дневный период для заданного диапазона данных; если количество событий превышает (например) 10, мне нужно предупредить менеджеров. Я уже создал набор данных, который содержит даты и соответствующие им числа событий колл-центра.

  Date      Events   w01 w02 w03 w04 w05
11/01/2011    5       * 
11/02/2011    2       *   *     
11/03/2011    4       *   *   *
11/04/2011    1       *   *   *   *
11/05/2011    0       *   *   *   *   *
11/06/2011    2           *   *   *   *
11/07/2011    7               *   *   *
11/08/2011    0                   *   *
11/09/2011    5                       *


I would like to have the results in this format
w01: 12 events
w02:  7 events
w03: 14 events (alert sent)
w04: 10 events
w05: 14 events (alert sent)

Мне как-то нужно выяснить, как запросить это в группах по 5 последовательных дней и суммировать количество событий. Что-то вроде

select sum(events)
from tablename
group by datepart(dd, date) * 5

но это не работает правильно. Моя альтернатива — ужасный цикл foreach date, суммирующий событие между датой и датой + 5. Я бы предпочел этого не делать.

Подталкивание в правильном направлении приветствуется.

Спасибо.


person Andy Evans    schedule 29.11.2011    source источник


Ответы (2)


Вы можете попробовать что-то вроде этого:

select
    Date,
    (select sum(events)
     from tablename d2
     where abs(datediff(DAY, d1.Date, d2.Date)) <= 2) as EventCount
from
    tablename d1
where
    Date between '11/03/2011' and '11/07/2011'

Пример вывода:

Date        EventCount
11/03/2011  12
11/04/2011  9  ** Note that the correct value for w02 is 9, not 7
11/05/2011  14
11/06/2011  10
11/07/2011  14
person mellamokb    schedule 29.11.2011

Вы можете использовать день года. Что-то вроде:

select datepart(dy, eventdate)/5 AS IntervalNo, sum(events)
from tablename
group by datepart(dy,eventdate)/5

Очевидно, что это упадет, когда наступит год, но это только начало.

person SteveCav    schedule 29.11.2011
comment
Это создаст непересекающиеся наборы из 5 дней, а не перекрывающиеся, как описывает OP. - person mellamokb; 29.11.2011