Bonjour,
J'ai un table TABLE contenant les deux champs suivants:
JOUR(INT),NOM(VARCHAR)
Chaque nom peut apparaître plusieurs fois avec à chaque fois un JOUR différent.
name1;21
name2;12
name3,24
name1;24
name2;56
name3;89
name1;78
name1;15
name3;25
name1;36
name2;79
name1;11
Je souhaite récupérer de cette table la liste (NOM,JOUR) dès 5 premières occurrences des jours les plus haut par nom:
Resultat:
name1;79
name1;78
name1;24
name1;21
name1;15
name2;79
name2;56
name2;12
name3;89
name3;25
name3;24
J'ai essayé avec un champ supplémentaire (KEEP), une table COPIE_TABLE identique, en suivant la démarche suivante:
Pour récupérer mon résultat je fait une requête pour trouver tout les enregistrement de la table TABLE contenant O dans le champs KEEP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE COPIE_TABLE LIKE TABLE; #5 itération du code suivant: { INSERT COPIE_TABLE SELECT * FROM TABLE; update TABLE set TABLE.KEEP = 'O' where (JOUR, NOM) IN ( SELECT max(JOUR), NOM from COPIE_TABLE where KEEP !='O' group by NOM ); DELETE FROM "$table2; }
Cette requête fonctionne bien pour de toutes petites tables, or il se trouve que j'ai une table avec plus de 800 000 enregistrement et lorsque j'éxécute la première requête update, le calcul est interminable et au bout d'un moment mysql plante....
Que puis-je faire pour obtenir le résultat souhaité ?
Merci d'avance,
Orangepulpe.
Partager