metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 2011
-
23 août 2006 à 11:47
metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 2011
-
24 août 2006 à 10:25
Salut tous le monde
Je suis entrain de faire un logiciel pour ma boite avec des requetes oracle. Hors sur le nombre de requete certaines sont tres longues des que les dates sont rapprochés mais egalement instantanés si les dates sont eloignés hors ce n'est pas tres logique puisque la requete ramene plus d'enregistrement.
Bien sur je pourrais mettre des dates eloignées et faire mon tri en vb pour ne ressortir que celle de la semaine mais je prefere que cela soit oracle qui le fasse.
voici ma requete si qqun a une idée
--Recuperation OF Rebut
SELECT
DISTINCT wmt
.CREATION_DATE
, wmt
.WIP_ENTITY_NAME
AS NumOF
,msib
.SEGMENT1
AS Article
,wmt
.TRANSACTION_QUANTITY
AS Qte
,wmt
.FM_OPERATION_SEQ_NUM
AS NumOP
,wmt
.REFERENCE
AS NumTNC
,wo
.DESCRIPTION
AS Description
,wmt
.TO_INTRAOPERATION_STEP_TYPE
FROM
apps
.wip_move_Transactions_v wmt
,apps
.mtl_system_items_b msib
,apps
.wip_operations wo
WHERE
msib
.ORGANIZATION_ID
=
147AND
wo
.ORGANIZATION_ID
=msib
.ORGANIZATION_ID
AND
wmt
.ORGANIZATION_ID
=msib
.ORGANIZATION_ID
AND
msib
.SEGMENT1
IN
('3011001','3011002','3011003','3011004','3011005','3011006','3011007','3011008','3011009','3011010','3011012','3011013','3011014','3011015','3011016','3011017','3011018','3011019','3011020','3011021','3011022','3011023','3011024','3011025','3011026','3011027','3011028','3011031')AND
wmt
.WIP_ENTITY_ID
=wo
.WIP_ENTITY_ID
AND
wo
.OPERATION_SEQ_NUM
=wmt
.TO_OPERATION_SEQ_NUM
AND
wmt
.TO_INTRAOPERATION_STEP_TYPE
='5'AND
wmt
.CREATION_DATE
BETWEEN
'21/08/2006'
AND
'23/08/2006'AND
wmt
.PRIMARY_ITEM_ID
=msib
.INVENTORY_ITEM_ID
ORDER
BY wmt
.creation_date
DESC
si je met du 21/06/2006 je suis plus rapide que en mettant 21/08/2006 alors que je ramene 12 resultats au lieu d'un seul.
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 octobre 2006 23 août 2006 à 18:34
crilun,
Salut,
je bosse plutot sous SQL server mais je pense que ca doit etre le cas pour la plsu part des bases de données,
le between est plus long que 2 faire 2 comparaison , alors je ne sais pas pourquoi et ce qu'il fait exeactement derriere,
mais il vaut mieux :
(wmt
.CREATION_DATE >=
'21/08/2006' AND wmt
.CREATION_DATE<=
'23/08/2006')
test déja comme ca voir si ca change quelquechose à ton temps d'éxecution.
ensuite autre truc c'est que ta requete peut etre optimisé déja avec
les jointures car la tu mutliplie les enregsitrements de tes tables et
filtre apres alors qu'avec les jointures,
ce qui te donnerais ca :
SELECT DISTINCT
wmt.CREATION_DATE ,
wmt.WIP_ENTITY_NAME AS NumOF,
msib.SEGMENT1 AS Article,
wmt.TRANSACTION_QUANTITY AS Qte,
wmt.FM_OPERATION_SEQ_NUM AS NumOP,
wmt.REFERENCE AS NumTNC,
wo.DESCRIPTION AS Description,
wmt.TO_INTRAOPERATION_STEP_TYPE
FROM
apps.mtl_system_items_b msib,
LEFT JOIN apps.wip_move_Transactions_v wmt ON
(wmt.ORGANIZATION_ID=msib.ORGANIZATION_ID AND
wmt.PRIMARY_ITEM_ID=msib.INVENTORY_ITEM_ID),
LEFT JOIN apps.wip_operations wo ON
(wo.ORGANIZATION_ID=msib.ORGANIZATION_ID AND
wmt.WIP_ENTITY_ID=wo.WIP_ENTITY_ID AND
wo.OPERATION_SEQ_NUM=wmt.TO_OPERATION_SEQ_NUM)
metalcoder
Messages postés193Date d'inscriptionjeudi 14 février 2002StatutMembreDernière intervention25 mars 20111 24 août 2006 à 10:25
Merci de ton conseil mais cela n'as rien changer.
j'ai mis des jointures a mes tables (au passage c'est un (+) qu'il faut mettre sur oracle)
et j'ai egalement changer le between mais sans resultat. Peut etre un peu plus rapide mais pas satisfaisant.
Donc je n'ai mis aucune restriction en date et c'est en VB que j'affiche juste la semaine qui m'interresse.