Использование функции sum с условием на основе возвращаемого значения

У меня есть набор данного месяца с количеством часов, связанных с каждым из них

DATE          HOURS
8/1/2013      3
9/1/2013      8
10/1/2013     2
11/1/2013     4
12/1/2013     1  

Мне нужно вернуть сумму часов для всего, что было в прошлом, включая текущий месяц, в примере ниже, начиная с августа, сумма будет только август. Для сентября мне нужен август + сентябрь

DATE          HOURS     SUM
8/1/2013      3         3
9/1/2013      8         11
10/1/2013     2         13
11/1/2013     4         17
12/1/2013     1         18

Я не уверен, как поступить, так как условие даты отличается для каждой строки.

Если кто-то может помочь в этом, был бы очень признателен

1 ответ

Вы можете сделать это на большинстве диалектов SQL, используя коррелированный подзапрос (или не равнозначный, но я нахожу очиститель подзапроса):

select date, hours,
       (select sum(t2.hours)
        from t t2
        where t2.date <= t.date
       ) as cum
from t;

Многие механизмы SQL также поддерживают функцию накопительной суммы, которая обычно выглядит следующим образом:

select date, hours sum(hours) over (order by date) as cum
from t
Другие вопросы по тегам