私は、シフト管理に応じて、2日間にわたって開かれるビジネスのために、日時ベースのトランザクションレポートを作成しようとしています。DATETIMEの範囲で「グループ化」する方法は?
ユーザーはdatetimeの範囲(毎月、毎日、毎週、自由...)を選択できます。実装したクエリはstartDateTimeとEndDateTimeを取得し、すべてのトランザクションを合計で1日ごとに返します。
I.E.
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
私の問題は、ビジネスのシフトがsettedであれば、例えば、次の日の02.00 AMに05.00 AMから、02.00 AMに真夜中から行われたすべてのトランザクションは、次の日にグループ化されるということです...など...合計は壊れています。 ビジネスがこのようなシフトを抱えている場合、そのシフトに基づいたレポートが必要ですが、コードのパッチを適用しないと(JavaのOracleネイティブ問合せを使用しています)、リクエストされたレポートを取得できません。
Oracle以外のものを使用して、これらの一連のトランザクションを日時の範囲でグループ化するスマートな方法があるのだろうかと思います。ここで
は、7月のため、クエリを行く:
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
これは必ずしもvarchar値ではありません。 – Donnie