[MYSQL] Extraire les 2 premiers enregistrement d'une table par ordre alphabétique pour chaque lettre
1 réponse
messian_nospam
Bonjour,
Je voudrais extraire les 2 premiers enregistrement d'une table par ordre
alphabétique pour chaque lettre.
Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une
requetes à chaque lettre pour sortir les 2 premiers enregistrement pour
la lettre donnée...
Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?
--
Un moyen de garde pour vos enfants ?
http://www.easynounou.com
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred Brouard - SQLpro
JF Messian a écrit :
Bonjour,
Je voudrais extraire les 2 premiers enregistrement d'une table par ordre alphabétique pour chaque lettre.
Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une requetes à chaque lettre pour sortir les 2 premiers enregistrement pour la lettre donnée...
Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?
Très facile avec les fonction de fenêtrage de la norme SQL:1999 Mais il faut ajouter une table des lettres (SQL ne sait pas inventer une info manquante !)
CREATE TABLE T_LETTRE_LET (LET CHAR(1) NOT NULL PRIMARY KEY);
INSERT INTO T_LETTRE_LET VALUES ('A'); INSERT INTO T_LETTRE_LET VALUES ('B'); INSERT INTO T_LETTRE_LET VALUES ('C'); INSERT INTO T_LETTRE_LET VALUES ('D'); INSERT INTO T_LETTRE_LET VALUES ('E'); INSERT INTO T_LETTRE_LET VALUES ('F'); INSERT INTO T_LETTRE_LET VALUES ('G'); INSERT INTO T_LETTRE_LET VALUES ('H'); INSERT INTO T_LETTRE_LET VALUES ('I'); INSERT INTO T_LETTRE_LET VALUES ('J'); INSERT INTO T_LETTRE_LET VALUES ('K'); INSERT INTO T_LETTRE_LET VALUES ('L'); INSERT INTO T_LETTRE_LET VALUES ('M'); INSERT INTO T_LETTRE_LET VALUES ('N'); INSERT INTO T_LETTRE_LET VALUES ('O'); INSERT INTO T_LETTRE_LET VALUES ('P'); INSERT INTO T_LETTRE_LET VALUES ('Q'); INSERT INTO T_LETTRE_LET VALUES ('A'); INSERT INTO T_LETTRE_LET VALUES ('R'); INSERT INTO T_LETTRE_LET VALUES ('S'); INSERT INTO T_LETTRE_LET VALUES ('T'); INSERT INTO T_LETTRE_LET VALUES ('U'); INSERT INTO T_LETTRE_LET VALUES ('V'); INSERT INTO T_LETTRE_LET VALUES ('W'); INSERT INTO T_LETTRE_LET VALUES ('X'); INSERT INTO T_LETTRE_LET VALUES ('Y'); INSERT INTO T_LETTRE_LET VALUES ('Z');
SELECT LET, PRS_NOM FROM ( SELECT LET, PRS_NOM, ROW_NUMBER() OVER(ORDER BY PRS_NOM, PARTITION BY LET) AS N FROM T_PERSONNE_PRS AS T INNER JOIN T_LETTRE_LET AS L ON T.PRS_NOM LIKE L.LET +'%' ) AS T WHERE N <= 2;
En revanche je ne sais pas si MySQL connait les fonctions de fenêtrage. Je crois qu'il est très en retard sur ce genre de sujets...
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
JF Messian a écrit :
Bonjour,
Je voudrais extraire les 2 premiers enregistrement d'une table par ordre
alphabétique pour chaque lettre.
Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une
requetes à chaque lettre pour sortir les 2 premiers enregistrement pour
la lettre donnée...
Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?
Très facile avec les fonction de fenêtrage de la norme SQL:1999
Mais il faut ajouter une table des lettres (SQL ne sait pas inventer une
info manquante !)
CREATE TABLE T_LETTRE_LET
(LET CHAR(1) NOT NULL PRIMARY KEY);
INSERT INTO T_LETTRE_LET VALUES ('A');
INSERT INTO T_LETTRE_LET VALUES ('B');
INSERT INTO T_LETTRE_LET VALUES ('C');
INSERT INTO T_LETTRE_LET VALUES ('D');
INSERT INTO T_LETTRE_LET VALUES ('E');
INSERT INTO T_LETTRE_LET VALUES ('F');
INSERT INTO T_LETTRE_LET VALUES ('G');
INSERT INTO T_LETTRE_LET VALUES ('H');
INSERT INTO T_LETTRE_LET VALUES ('I');
INSERT INTO T_LETTRE_LET VALUES ('J');
INSERT INTO T_LETTRE_LET VALUES ('K');
INSERT INTO T_LETTRE_LET VALUES ('L');
INSERT INTO T_LETTRE_LET VALUES ('M');
INSERT INTO T_LETTRE_LET VALUES ('N');
INSERT INTO T_LETTRE_LET VALUES ('O');
INSERT INTO T_LETTRE_LET VALUES ('P');
INSERT INTO T_LETTRE_LET VALUES ('Q');
INSERT INTO T_LETTRE_LET VALUES ('A');
INSERT INTO T_LETTRE_LET VALUES ('R');
INSERT INTO T_LETTRE_LET VALUES ('S');
INSERT INTO T_LETTRE_LET VALUES ('T');
INSERT INTO T_LETTRE_LET VALUES ('U');
INSERT INTO T_LETTRE_LET VALUES ('V');
INSERT INTO T_LETTRE_LET VALUES ('W');
INSERT INTO T_LETTRE_LET VALUES ('X');
INSERT INTO T_LETTRE_LET VALUES ('Y');
INSERT INTO T_LETTRE_LET VALUES ('Z');
SELECT LET, PRS_NOM
FROM
(
SELECT LET, PRS_NOM, ROW_NUMBER() OVER(ORDER BY PRS_NOM, PARTITION BY
LET) AS N
FROM T_PERSONNE_PRS AS T
INNER JOIN T_LETTRE_LET AS L
ON T.PRS_NOM LIKE L.LET +'%'
) AS T
WHERE N <= 2;
En revanche je ne sais pas si MySQL connait les fonctions de fenêtrage.
Je crois qu'il est très en retard sur ce genre de sujets...
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Je voudrais extraire les 2 premiers enregistrement d'une table par ordre alphabétique pour chaque lettre.
Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une requetes à chaque lettre pour sortir les 2 premiers enregistrement pour la lettre donnée...
Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?
Très facile avec les fonction de fenêtrage de la norme SQL:1999 Mais il faut ajouter une table des lettres (SQL ne sait pas inventer une info manquante !)
CREATE TABLE T_LETTRE_LET (LET CHAR(1) NOT NULL PRIMARY KEY);
INSERT INTO T_LETTRE_LET VALUES ('A'); INSERT INTO T_LETTRE_LET VALUES ('B'); INSERT INTO T_LETTRE_LET VALUES ('C'); INSERT INTO T_LETTRE_LET VALUES ('D'); INSERT INTO T_LETTRE_LET VALUES ('E'); INSERT INTO T_LETTRE_LET VALUES ('F'); INSERT INTO T_LETTRE_LET VALUES ('G'); INSERT INTO T_LETTRE_LET VALUES ('H'); INSERT INTO T_LETTRE_LET VALUES ('I'); INSERT INTO T_LETTRE_LET VALUES ('J'); INSERT INTO T_LETTRE_LET VALUES ('K'); INSERT INTO T_LETTRE_LET VALUES ('L'); INSERT INTO T_LETTRE_LET VALUES ('M'); INSERT INTO T_LETTRE_LET VALUES ('N'); INSERT INTO T_LETTRE_LET VALUES ('O'); INSERT INTO T_LETTRE_LET VALUES ('P'); INSERT INTO T_LETTRE_LET VALUES ('Q'); INSERT INTO T_LETTRE_LET VALUES ('A'); INSERT INTO T_LETTRE_LET VALUES ('R'); INSERT INTO T_LETTRE_LET VALUES ('S'); INSERT INTO T_LETTRE_LET VALUES ('T'); INSERT INTO T_LETTRE_LET VALUES ('U'); INSERT INTO T_LETTRE_LET VALUES ('V'); INSERT INTO T_LETTRE_LET VALUES ('W'); INSERT INTO T_LETTRE_LET VALUES ('X'); INSERT INTO T_LETTRE_LET VALUES ('Y'); INSERT INTO T_LETTRE_LET VALUES ('Z');
SELECT LET, PRS_NOM FROM ( SELECT LET, PRS_NOM, ROW_NUMBER() OVER(ORDER BY PRS_NOM, PARTITION BY LET) AS N FROM T_PERSONNE_PRS AS T INNER JOIN T_LETTRE_LET AS L ON T.PRS_NOM LIKE L.LET +'%' ) AS T WHERE N <= 2;
En revanche je ne sais pas si MySQL connait les fonctions de fenêtrage. Je crois qu'il est très en retard sur ce genre de sujets...
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************