Tout d'abord bonjour à tous, je viens poster ici en désespoir de cause, car après des heures de recherche avec la documentation je ne trouve pas LA solution me permettant de m'affranchir de mon souci.
J'explique la situation:
BDD: Sybase
Requête: Pour procédure stockée SQL
Admettons deux tables T1 et T2.
- T1 contient toujours l'enregistrement dont j'ai besoin (car je le retrouve via un ID dont je suis certain)
- T2 contient de 0 à n lignes
la jointure est sur un champ nommé ID_USER.
Je souhaite retourner un champ nommé DATE_TRT dans T2... seulement celui-ci est dupliqué et ma règle de gestion m'impose de récupérer la valeur MAXI de cette DATE_TRT... donc si possible une seule ligne.
La requête que j'ai tentée est la suivante (en admettant que mon ID_USER recherché soit 1000):
Cela fonctionne si T2 n'est pas absent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Select T1.ID_USER, T1.LOGIN, T2.DATE_TRT From T1 JOIN T2 ON T1.ID_USER = T2.ID_USER where T1.DATE_TRT = (Select max(DATE_TRT) From T2 where ID_USER = 1476) AND T1.ID_USER = 1476
Essayons avec le outer join : si je laisse la condition 'MAX' je ne retourne rien pour un autre ID (1813) qui lui n'a pas de données dans T2. Logique... mais que faire pour conserver malgré tout ce MAX, ou bien le mettre ailleurs?
J'espère avoir été suffisamment clair dans mes explications...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Select T1.ID_USER, T1.LOGIN, T2.ACTION_DATE From T1 LEFT OUTER JOIN T2 ON T1.ID_USER = T2.ID_USER --AND T2.ID_USER IS NULL where T2.ACTION_DATE = (select MAX(T2.DATE_TRT) From T2 where T2.ID_USER = 1813) AND T1.ID_USER = 1813
En tout ca cela ne fonctionne pas totalement: si je sélectionne le MAX de la date pour en avoir un seule cela passe quand elle existe, si je ne place pas le max et que je maintiens une jointure en outer join (pour récupérer les autres cas), alors je n'ai plus cette notion de valeur maxi.
NOTA: la partie en commentaires, qu'elle soit active ou non ne m'aide pas du tout c'est à dire que je ne retourne pas les bonnes données...
HELP!
Partager