Mysql Requête pour supprimer doublons spéciaux - SQL/NoSQL - Programmation
Marsh Posté le 01-01-2014 à 01:55:47
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 |
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 |
Donc ton insert complet va ressembler a ca:
INSERT INTO table_temp(a,b,c,d,e,f) |
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) |
5 - Tu peux maintenant te debarasser de la table temporaire.
Marsh Posté le 01-01-2014 à 02:11:24
Merci infiniment de votre réponse,
Pour commencer je rectifie mon post la clé est en b et non en D comme mentionné plus haut.
Citation : 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. |
Non votre requête est syntaxiquement parfaite, je viens de la tester.
Deuxième chose importante que je n'ai pas dite clairement:N'est concerné par ce regroupement ne concerne que les enregistrements qui:
Cas limite je donne un exemple si on a les 5 enregistrements qui suivent
Zarbi 235 192 05 07 R3
Zarbi 236 192 05 07 R9
Zarbi 237 196 16 07 R3
Zarbi 238 192 05 07 R3
Darbi 239 192 05 07 R3
Les 2 enregistrements
Zarbi 235 192 05 07 R3 et Zarbi 238 192 05 07 R3 seront regroupés en Zarbi 23 192 05 07 R3
les 3 autres seront laissés tels qu'ils sont
Zarbi 236 192 05 07 R9
Zarbi 237 196 16 07 R3
Darbi 239 192 05 07 R3
donc au final on aurait
Zarbi 23 192 05 07 R3
Zarbi 236 192 05 07 R9
Zarbi 237 196 16 07 R3
Darbi 239 192 05 07 R3
Merci infiniment.
Marsh Posté le 01-01-2014 à 01:33:45
Je vais exposer le problème (hélas) que je rencontre depuis un moment avec une table(5 champs A,B,C, D,E et F(D est une clé)) sous MySQL en donnant un extrait des données de cette table:
Voici ce que je veux avoir en résumé:
de la ligne 1 à la ligne 10, on supprime tout en remplaçant par
En d'autres termes 27 représente les 10 enregistrements (de 270 à 279) et toutes les infos dans les 10 enregistrements sont identiques à part bien sûr la clé qui est différente forcément donc on fait un agrégat en quelque sorte et on rédume tout dans l'enregistrement ci dessus qui a 27 comme clé(bien évidemment cette valeur nouvelle est différente de toutes les autres valeurs existantes déjà dans le champs B sinon il y aurait une erreur)
de la ligne 11 à la ligne 17
malgré le fait que la lignes correspondant aux deux IDs 7705 et 7708 n'existent pas dans la liste.
de la ligne 18 à 26, on supprime tout pour remplacer par la ligne
de la ligne 27 à 37 on garde tout tel quel car malgré la sériation parfaite de l'ID, on a des valeurs différentes des champs C, D et E à la ligne 33, donc on ne peut pas grouper.
Merci infiniment d'avoir la patience de me lire car je trouve tout ça ennuyeux malgré le fait que ce soit mon premier souci pour le moment.
Merci infiniment de votre aide.