Forum Clubic

Tri par date et garder que les dernieres - Probleme de date sous Oracle

Bonjour,

j’ai une requete oracle dans un projet informatique et j’aimerais ameliorer sa vitesse en supprimant des dates.

la requete me sort toutes les dates depuis le debut et je voudrais garder toutes les lignes avec la derniere date enregistrée.

voici ma requete

SELECT

SUM(mmt.TRANSACTION_QUANTITY)AS Total,
mmt.CREATION_DATE AS DateCreation,
mmt.SUBINVENTORY_CODE
FROM
apps.MTL_MATERIAL_TRANSACTIONS mmt,
apps.mtl_system_items_b msib
WHERE msib.SEGMENT1 IN(‘3011001’)
AND mmt.SUBINVENTORY_CODE IN(‘Principal’,‘Dérogation’,‘Expe’)
AND mmt.ORGANIZATION_ID=‘147’
AND mmt.INVENTORY_ITEM_ID=msib.INVENTORY_ITEM_ID
AND mmt.TRANSFER_SUBINVENTORY=‘EXPE’
AND msib.ORGANIZATION_ID=‘147’
GROUPBY
mmt.CREATION_DATE ,
mmt.SUBINVENTORY_CODE
ORDERBY
mmt.CREATION_DATE DESC

la requete me sort ceci

1 : -8 / 26/09/2006 9:23 / Principal
2 : -12 / 26/09/2006 9:20 / Principal
3 : -6 / 25/09/2006 11:40 / Principal
4 : -2 etc…

moi je voudrais que ma requete ne garde que la ligne 1 et 2 .

merci d’avance

Suis pas un pro des BDD, mais tu veux la date du jour, ou un nombre fixe de lignes ?

je connais pas oracle, mais en mysql tu peux faire : LIMIT = 2 pour avoir que les deux derniers enregistrements.

en faite je voudrais que la requete me sorte que les lignes qui ont la date la plus recente. Il peut y avoir 1 lignes comme 5 lignes et ca je ne peut pas le savoir. Tout comme la date qui peut daté d’hier comme elle peut daté d’un mois.

Mon but c’est d’ameliorer la vitesse de la requete en ressortant que les dernieres dates.

merci

Donc tu veux une seule journée à la fois c ca ?

Si tu fait un max(creation_date) et que tu l’enlève à la fin, tu n’aura bien que la dernière date, par contre, tu aura la somme pour tout, ça change le résultat du total :neutre:

max(mmt.CREATION_DATE AS DateCreation)

GROUPBY
mmt.SUBINVENTORY_CODE

tout a fait.

j’avais essayer de mettre max mais la requete me ressort tout les dates

bref je nage…

ben il faut l’enlever du group by.

il y aussi la méthode bourrin, mais évidemment pas efficace en perf:
dans le where, tu rajoute mmt.CREATION_DATE =(select max( CREATION_DATE) from apps.MTL_MATERIAL_TRANSACTIONS mmt2 where mmt2.INVENTORY_ITEM_ID = mmt.INVENTORY_ITEM_ID)

mais de ce que je comprend, tu veux retourner que 3 lignes, vu que tu groupe par SUBINVENTORY_CODE et que tu n’en sélectionne que trois avec le “in (‘Principal’,‘Dérogation’,‘Expe’)”
C’est peut-être aussi simple de lancer les 3 requêtes, et de ne garderqu’une ligne pour chaque