У вас есть два ограничения по времени. Первый заключается в том, чтобы ограничить даты определенным месяцем. Предположим, мы получили первый день месяца в качестве параметра даты:
where transaction_time >= :searchMonth
and transaction_time < Date_Add(:searchMonth, interval 1 month)
Теперь мы смотрим только на строки из этого месяца. Теперь ограничьте его указанным часом. Предположим, что мы получаем час как целочисленный параметр:
and extract(hour from transaction_time) between :hr and (:hr + 1)
Теперь эта заключительная часть основана на вашем собственном коде. Позволь мне сказать, что, когда требования чтения «в течение определенного времени суток», и запрос читает «во время полуденного часа», то я обыкновение писать так:
and extract(hour from transaction_time) >= :hr
and extract(hour from transaction_time) < (:hr + 1)
потому, что час 13 (1 вечер) это первый щелчок следующего часа. Поэтому, если время транзакции составляет ровно 13:00:00, и вы используете between
, тогда он будет отображаться при просмотре часов в полдень, а также при просмотре 1 часа в час. Это НЕ является желаемым результатом. Вы можете проверить это со своим аналитиком.
Так полный фильтр, как я бы написать, это:
where transaction_time >= :searchMonth
and transaction_time < Date_Add(:searchMonth, interval 1 month)
and extract(hour from transaction_time) >= :hr
and extract(hour from transaction_time) < (:hr + 1)
Вы должны отредактировать вопрос с образцами данных, желаемых результатов, и ваши собственные попытки решить эту проблему. –