Выбор количества записей по месяцам

#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;
 

бд<>скрипка <>здесь