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

Jusque là, ça va. Mais c'est pour le reste où je sèche, je tente quand même pour le chargement des visites.
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
Ici j'ai l'ensemble des visites rattachées aux dépôts limitrophes de ceux que j'ai passé (1, 2, 3).

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