SQL запрос. Как посчитать кол-во записей по месяцам
У меня есть таблица транзакций с данными за 3 месяца, в каждом месяце по одной а может быть и 2 записи:
запрос:
select a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH'), count(*) a_count
from a_transactions a
where a.v_date between '01.03.2019' and '31.05.2019'
group by a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH');
результат:
BRANCH ACC ID TRUNC(A.DATE,'MONTH') A_COUNT
------ ----------- ----------- ----------------------- ----------
1 3 154 01.03.2019 1
1 3 154 01.04.2019 1
1 3 154 01.05.2019 1
За каждый месяц a_count вывела одну запись. Мне нужно что бы a_count считала и количество за прежние месяцы то есть если в марте a_count был равен 1, в апреле тоже есть запись, a_count уже должен быть равен 2 и если в мае тоже есть запись то a_count дожен быть 3
вот какой результат нужен:
BRANCH ACC ID TRUNC(A.DATE,'MONTH') A_COUNT
------ ----------- ----------- ----------------------- ----------
1 3 154 01.03.2019 1
1 3 154 01.04.2019 2
1 3 154 01.05.2019 3
Ответы (1 шт):
Этот расчет называется накопительный итог и довольно часто используется. В комментарии написали идею запроса для подсчета количества накопительным итогом - заворачиваем агрегатную функцию в оконную. Только, полагаю, вам надо подсчет вести в разрезе BRANCH, ACC, ID, тогда добавим ещё ограничение для окна:
select a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH'),
sum(count(*)) OVER (partition by a.branch, a.dt_acc, a.ct_id order by trunc(a.date,'MONTH')) a_count
from a_transactions a
where a.v_date between '01.03.2019' and '31.05.2019'
group by a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH');