J'essaie d'élaborer un rapport de transactions basé sur une plage de dates, pour une entreprise qui peut être ouverte sur deux jours, en fonction de la gestion des équipes.Comment "grouper par" sur une plage DATETIME?
L'utilisateur peut sélectionner une plage de dates (mensuelle, quotidienne, hebdomadaire, libre ...), la requête que j'ai implémentée obtient startDateTime et EndDateTime, et retournera toutes les transactions groupées par jour.
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
Mon problème est que si le changement de l'entreprise est setted, par exemple, 05:00-02h00 du lendemain, toutes les transactions effectuées entre minuit et 02h00 seront regroupées le lendemain ... et ainsi de suite ... les totaux sont corrompus. Lorsqu'une entreprise a un tel changement, elle veut un rapport basé sur ce décalage, mais sans correctif de code (j'utilise Java appelant des requêtes natives Oracle), je ne parviens pas à obtenir le rapport demandé.
Je me demande s'il y a une manière intelligente de grouper par une plage de date/heure ces ensembles de transactions en utilisant rien de plus qu'Oracle.
va ici la requête, pour le mois de Juillet:
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
Ce ne sera pas nécessairement une valeur de varchar. – Donnie