Я пытаюсь составить отчет о транзакциях на основе диапазона дат и времени для бизнеса, который может быть открыт в течение двух дней, в зависимости от управления сменой.
Пользователь может выбрать диапазон даты / времени (ежемесячно, ежедневно, еженедельно, свободно ...), реализованный мной запрос получит startDateTime и EndDateTime и вернет все транзакции, сгруппированные по дням.
И.Е.
DateTime Total Sales
---------------------------
10/15/2010 $2,300.38
10/16/2010 $1,780.00
10/17/2010 $4,200.22
10/20/2010 $900.66
Моя проблема заключается в том, что, если установлена смена бизнеса, например, с 05:00 до 02:00 следующего дня, все транзакции, выполненные с полуночи до 02:00, будут сгруппированы на следующий день ... и итак ... итоги искажены.
Когда у предприятия есть такой сдвиг, ему нужен отчет, основанный на этом сдвиге, но без исправления кода (я использую Java для вызова собственных запросов Oracle), я не могу получить запрошенный отчет.
Мне интересно, есть ли какой-нибудь разумный способ сгруппировать по диапазону даты и времени эти наборы транзакций, используя только Oracle.
Вот запрос на июль месяц:
SELECT Q1.dateFormat, NVL(Q1.sales, 0)
FROM (
SELECT to_date(to_char(tx.datetimeGMT +1/24 , 'mm-dd-yyyy'), 'mm-dd-yyyy') AS dateFormat
, NVL(SUM(tx.amount),0) AS sales
FROM Transaction tx
WHERE tx.datetimeGMT > to_date('20100801 08:59:59', 'yyyymmdd hh24:mi:ss') +1/24
AND tx.datetimeGMT < to_date('20100901 09:00:00', 'yyyymmdd hh24:mi:ss') + 1/24
GROUP BY to_date(to_char(tx.datetimeGMT +1/24 , 'mm-dd-yyyy'), 'mm-dd-yyyy')
) Q1
ORDER BY 1 DESC