[RESOLU] Petite aide rapide sur SQL

Petite aide rapide sur SQL [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 03-02-2011 à 16:50:27    

Bonjour,
 
J'ai besoin d'une petite requête SQL qui, pour ceux qui maîtrisent, doit paraître triviale, mais qui pour ma part me dépasse, compte-tenu du fait que je ne sais faire que du très (très) simple sous SQL
 
Voilà le pb
 
Une table TABLE contenant les trois colonnes ID, RANG et LIBELLE, le couple ID et RANG étant un identifiant unique
 
ID RANG LIBELLE
123 1 lib_1231
123 2 lib_1232
456 5 lib_4565
456 8 lib_4568
789 4 lib_7894
 
Je voudrais que le select me donne la liste des ID et LIBELLE, avec dans le cas où ID existe en plusieurs exemplaires, uniquement l'occurrence avec le plus petit RANG
 
Càd
 
123 lib_1231
456 lib_4568
789 lib_7894
 
Merci d'avance


Message édité par rogntudjuuu le 04-02-2011 à 10:38:13
Reply

Marsh Posté le 03-02-2011 à 16:50:27   

Reply

Marsh Posté le 03-02-2011 à 16:59:36    

Hello,
 
vite fait :
 
SELECT a.ID, a.LIBELLE
FROM TABLE a
INNER JOIN
(SELECT a.ID, MIN(A.RANG) AS MINIMUM_RANG
FROM TABLE a
INNER JOIN
 (SELECT ID
FROM TABLE
GROUP BY ID
HAVING COUNT(*) > 1) as b
ON a.ID = b.ID
GROUP BY a.ID) AS b
ON a.ID = b.ID
AND a.RANG = B.MINIMUM_RANG
 
N'hésite pas a demander si tu ne comprend pas quelque chose dans la requête
 
A plus

Reply

Marsh Posté le 03-02-2011 à 17:47:07    

Sous Oracle, avec les fonctions analytiques, de tête, ça donnerait quelque chose comme ça :
 
Select distinct ID, FIRST_VALUE(LIBELLE) OVER (PARTITION BY ID ORDER BY RANG ASC)
From TABLE
 
C'est assez lisible :
on prends la première valeur (first_value) de la liste des LIBELLE pour chaque ID (partition by ID), valeurs ordonnées par RANG du plus petit au plus grand (order by rang asc)
 
Si m'est souvenirs sont bons c'est aussi valable pour SQL Serveur au niveau syntaxe.


---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 04-02-2011 à 10:36:49    

Merci beaucoup.
Je vais essayer de comprendre et d'appliquer à mon cas précis


Message édité par rogntudjuuu le 04-02-2011 à 10:37:52
Reply

Sujets relatifs:

Leave a Replay

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