La sélection de première ligne par groupe
J'ai un tableau avec trois colonnes: A,B,C
.
Les valeurs sont:
+---+-----+----+
| A | B | C |
+---+-----+----+
| 1 | -10 | 5 |
| 1 | 0 | 5 |
| 1 | 10 | 5 |
| 2 | 10 | 12 |
| 2 | 0 | 12 |
| 3 | -10 | 14 |
| 4 | 0 | 8 |
| 4 | 10 | 8 |
| 5 | 0 | 6 |
| 5 | 1 | 6 |
| 5 | -5 | 6 |
+---+-----+----+
Si j'ai d'abord afin que les données par colonne A
, puis colonne B
, puis colonne C
(bien que j'ai fait toutes colonne C
les valeurs de la même par colonne A
valeur) comment puis-je sélectionner "première ligne" par colonne A
?
Donc, il devrait en résulter:
+---+-----+----+
| A | B | C |
+---+-----+----+
| 1 | -10 | 5 |
| 2 | 0 | 12 |
| 3 | -10 | 14 |
| 4 | 0 | 8 |
| 5 | -5 | 6 |
+---+-----+----+
- la dernière devrait être {5,-5,6}
- Fixe...........
- Il y a aussi une réponse détaillée à dba.stackexchange.com: la Récupération de n lignes par groupe avec une comparaison de différentes approches.
Vous devez vous connecter pour publier un commentaire.
ou
Créer un indice composite sur
(a, b, c)
pour les requêtes de travailler plus vite.Lequel est le plus efficace dépend de votre distribution de données.
Si vous avez peu de valeurs distinctes de
a
mais beaucoup de dossiers à l'intérieur de chaquea
, la deuxième requête serait mieux.Vous pourriez l'améliorer encore plus par la création d'une vue indexée:
ORDER BY
à la fin de la requête à l'aide de la fonction:SELECT * FROM myfunction(2) ORDER BY a
. L'optimiseur de le pousser dans la requête si elle s'avère efficace.C'est un problème classique et a été demandé avant
Comment puis-je sélectionner la première ligne de chaque groupe dans une Requête SQL?
Sélectionnez la première ligne de chaque GROUPE PAR groupe?
Une bonne searchphrase est "sélectionnez la première ligne du groupe sql server"