lasnoufle La seule et unique! | Salut.
Vite fait, syntaxe pas forcement correcte donc a corriger si besoin (basee sur Oracle mais je suppose que sur un truc simple comme ca c'est quasiment pareil), pas teste, et probablement peu performant si gros volumes.
1 - Crees une table temporaire avec les meme champs
2 - Inseres-y les lignes "resumees". Pour cela c'est simple: cette requete te donne toutes les lignes resumees (en supposant que le champ B est un nombre): SELECT DISTINCT a, FLOOR(b/10) AS new_b, c, d, e, f FROM table; |
Sauf que tu ne veux pas resumer si la colonne B "tronquee" apparait plusieurs fois - donc il suffit de les filtrer: SELECT DISTINCT a, FLOOR(b/10) AS new_b, c, d, e, f FROM table
GROUP BY FLOOR(b/10)
HAVING COUNT(*)>0; |
Donc ton insert complet va ressembler a ca: INSERT INTO table_temp(a,b,c,d,e,f)
SELECT DISTINCT a, FLOOR(b/10) AS new_b, c, d, e, f FROM table
GROUP BY FLOOR(b/10)
HAVING COUNT(*)>0; |
3 - Maintenant que tu as tes lignes resumees dans ta table temporaire, tu vires les lignes qui les ont generees de ta table de depart: DELETE FROM table WHERE FLOOR(b/10) IN (SELECT b FROM table_temp); |
4 - Maintenant, tu n'as plus qu'a recopier les lignes resumees a la place: INSERT INTO table(a,b,c,d,e,f)
SELECT a,b,c,d,e,f
FROM table_temp; |
5 - Tu peux maintenant te debarasser de la table temporaire. ---------------
C'était vraiment très intéressant.
|