#sql #oracle
Вопрос:
Мне нужно подсчитать количество транзакций по каждой из них за год с октября 2020 по октябрь 2021 года . Ниже приведен запрос за весь год . Есть ли способ, которым я могу подсчитывать это каждый месяц, не выполняя 12 раз этот запрос?
select count(*)
from Transaction_Details
where date_created between TO_DATE('2020-10-01 01:00:00','YYYY-MM-DD hh24:mi:ss')
and TO_DATE('2021-10-01 01:00:00','YYYY-MM-DD hh24:mi:ss');
Комментарии:
1. Почему вы добавляете 1 час в диапазон дат и почему он начинается 10 числа месяца? Что вы подразумеваете под «за каждый месяц»? Вы имеете в виду за каждый календарный месяц? Или каждый месяц, начиная с 10 числа месяца? Или что-то еще? Если вы хотите, чтобы это было для каждого календарного месяца, то будет 13 месяцев (включая октябрь 2020 года по октябрь 2021 года).
Ответ №1:
Сократите дату до начала календарного месяца, и GROUP BY
это:
select TRUNC(date_created, 'MM') As calendar_month_start,
count(*)
from Transaction_Details
where date_created between DATE '2020-10-01' INTERVAL '1' HOUR
and DATE '2021-10-01' INTERVAL '1' HOUR
GROUP BY
TRUNC(date_created, 'MM')
ORDER BY
calendar_month_start;
Если вы хотите, чтобы это начиналось в 1 час ночи 1-го числа каждого месяца, то:
select TRUNC(date_created - INTERVAL '1' HOUR, 'MM')
INTERVAL '1' HOUR AS month_from_1am_on_1st,
count(*)
from Transaction_Details
where date_created between DATE '2020-10-01' INTERVAL '1' HOUR
and DATE '2021-10-01' INTERVAL '1' HOUR
GROUP BY
TRUNC(date_created - INTERVAL '1' HOUR, 'MM')
ORDER BY
month_from_1am_on_1st;
бд<>скрипка <>здесь