Petite aide rapide sur SQL [RESOLU] - SQL/NoSQL - Programmation
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
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.
Marsh Posté le 04-02-2011 à 10:36:49
Merci beaucoup.
Je vais essayer de comprendre et d'appliquer à mon cas précis
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