Bonsoir à tous,
J'ai une table dans laquelle il y a un champs "date d'enregistrement".
Comment traduire en SQL la phrase suivante :
"Ne conserver que les N enregistrement les plus récents."
En réalité, il faut raisonner à l'inverse, puisque en pratique il s'agit de faire un DELETE.
Donc, si je "Ne conserve que les N enregistrement les plus récents." alors je doit "supprimer ... heu ...bin "
Dans une discussion dans la section SQL, SQLPro m'a proposé d'utiliser une une fonction de fenêtrage :
Je trouvais le code puissant, j'ai mis "résolu" sans tester ROW_NUMBER dans MySQL5... et je n'ai pas trouvé cette fonction dans la doc (mal cherché?).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE T (D DATETIME) INSERT INTO T VALUES ('20010101') INSERT INTO T VALUES ('20020101') INSERT INTO T VALUES ('20030101') INSERT INTO T VALUES ('20040101') INSERT INTO T VALUES ('20050101') INSERT INTO T VALUES ('20060101') INSERT INTO T VALUES ('20070101') INSERT INTO T VALUES ('20080101') DELETE FROM T WHERE D IN (SELECT D FROM (SELECT ROW_NUMBER() OVER (ORDER BY D DESC) AS N, * FROM T) AS T WHERE N > 5)
C'est ma faute, j'aurais du préciser que mon problème se situait sur MySQL5.
Quelqu'un pourrait m'aider pour mon piti pb ?
Partager