Bonjour,
Voici mes données :
TBDEPOT (les dépôt)
DEPID
DEPCODE
TBDEPOTNEIGHBOURHOOD (le voisinage des dépôts)
DEPID (le dépôt)
NEIGHBOURHOODDEPID (un de ses voisin)
TBCUSTOMER
CUSTID (son id)
CUSTNAME (son nom)
DEPID (référence dépôt)
TBVISIT (les visites)
VISITID (son id)
VISITCUSTID (le client à visiter)
DEPID (le dépôt)
VISITDATEFROM (la date au plus tôt où il faut aller le visiter)
Et j'ai besoin de récupérer, pour chacun des clients, les premières prochaines visites associées aux dépôts du voisinage de mon dépôt... galère galère, donc c'est parti.
Sélection des dépôts du voisinage :
Les "1, 2, 3" sont des valeurs qui seront remplacées par mon programme avant exécution, ils représentent les identifiants des dépôts déjà chargés. Un dépôt A voisin d'un dépôt B ne veut pas dire que le dépôt B est voisin du dépôt A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SELECT * FROM TBDEPOT WHERE DEPID IN ( SELECT NEIGHBOURHOODDEPID FROM TBDEPOTNEIGHBOURHOOD WHERE DEPID IN (1, 2, 3) AND NEIGHBOURHOODDEPID NOT IN (1, 2, 3) )
Jusque là, ça va. Mais c'est pour le reste où je sèche, je tente quand même pour le chargement des visites.
Ici j'ai l'ensemble des visites rattachées aux dépôts limitrophes de ceux que j'ai passé (1, 2, 3).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SELECT * FROM TBVISIT V, TBCUSTOMER C WHERE V.DEPID IN ( SELECT NEIGHBOURHOODDEPID FROM TBDEPOTNEIGHBOURHOOD WHERE DEPID IN (1, 2, 3) AND NEIGHBOURHOODDEPID NOT IN (1, 2, 3) ) AND C.DEPID = V.DEPID -- Juste pour ne pas prendre les visites associées à un dépôt limitrophe mais dont le client n'est plus rattaché ORDER BY VISITDATEFROM DESC
Mais comment prendre la première. Il doit sûrement y avoir un "GROUP BY" sur le client et un "WHERE ROWNUM < 1" sur la visite pour ne prendre que la prochaine...
Vous pouvez m'aider ? Je suis un peu perdu :s
Merci,
A bientôt








Répondre avec citation
Partager