le max du max du max : requête un peu dur

le max du max du max : requête un peu dur - SQL/NoSQL - Programmation

Marsh Posté le 28-02-2006 à 16:46:11    

salut TLMD,
Je bloque sur une requête ou l'on me demande de piocher dans une table pour y séléctionner pour chaque contrat la dernière date d'arret (max) et à l'intèrieur de cette même date d'arret prendre la dernière date de début (max) et le tout en prenant tout les champs de la ligne (une douzaine).
Merci d'avance  
 
Voilà j'ai le jeu de données suivant:
 
------------------------------------------------------------------------
N° contrat  |      date_arret     |     debut      | date paiment|
------------------------------------------------------------------------
1                       01/01/01         10/01/2005    15/01/2005
1                       01/01/01         18/01/2005    22/01/2005
2                       04/02/01         10/02/2005    15/02/2005
2                       01/01/01         10/01/2005    15/01/2005
 
le résultat attendu:
------------------------------------------------------------------------
N° contrat  |      date_arret     |     debut      | date paiment|
------------------------------------------------------------------------
1                       01/01/01         18/01/2005    22/01/2005
2                       04/02/01         10/02/2005    15/02/2005


---------------
Le coeur des purs est le tombeau des confidences
Reply

Marsh Posté le 28-02-2006 à 16:46:11   

Reply

Marsh Posté le 28-02-2006 à 17:19:48    

Quel sgbd utilises-tu ?


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 28-02-2006 à 17:54:10    

à l'intuition je ferais un truc comme ça ( j'ai appelé ta table test):

Code :
  1. SELECT
  2. RES.*
  3. FROM
  4. test RES
  5. WHERE
  6. RES.date_arret = ( SELECT max(ARRET.date_arret) FROM test ARRET WHERE ARRET.no_contrat = RES.no_contrat)
  7. AND
  8. RES.debut = ( SELECT max(DEBUT.debut) FROM test DEBUT WHERE DEBUT.no_contrat = RES.no_contrat AND DEBUT.date_arret = RES.date_arret)


Les problèmes:
- je garantis pas que ça marche sur tous les SGBD ( mysql oui)
- c'est pas top niveau optimasation de la requête... surtout si ta table est grosse
- si tu as deux numéro de contrat ayant la même date_arret et le même début ( valant tous les deux le max possible), cela te remontera les 2 enregistrements
-

Reply

Marsh Posté le 28-02-2006 à 18:29:15    

Tout d'abord merci les gars
Le SGBD c'est oracle.
anapajari , le deuxième problème est un cas épineux (faut chercher celle qui  la date de paiment max)


---------------
Le coeur des purs est le tombeau des confidences
Reply

Marsh Posté le 01-03-2006 à 09:25:08    

bin tu rajoutes alors encore une where

Code :
  1. AND
  2. RES.date_paiement = ( SELECT max(PAIE.date_paiement) FROM test PAIE WHERE PAIE.no_contrat = RES.no_contrat AND PAIE.date_arret = RES.date_arret AND PAIE.debut = RES.debut)


 
Mais la ça devient super miteux comme requete ;)
Je connais pas assez Oracle mais il doit y avoir des fonctions qui doivent t'aider a faire ça.
 
Si ça existe vraiment pas, perso je ferais des vues et je les jointerais ensemble.

Reply

Marsh Posté le 01-03-2006 à 11:23:48    

Salut
J'ai trouvé la réponse merci de m'avoir mis sur la voie, en fait j'ai utilisé les requetes imbriquées (4 requêtes) .
@+


---------------
Le coeur des purs est le tombeau des confidences
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed