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 .
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.
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
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