Использование функции 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