DELETE quand 2 valeurs identiques
Résolu
Bonjour,
Quand je fais cette requete : SELECT Timestamp, Type FROM orange ORDER BY Timestamp LIMIT 0,2 j'obtiens 2 ligne et je souhaiterais faire un DELETE sur la ligne du Timestamp le plus récent quand le 'Type' est le même sur ces 2 lignes.
Pouvez vous m'aider svp ?
Quand je fais cette requete : SELECT Timestamp, Type FROM orange ORDER BY Timestamp LIMIT 0,2 j'obtiens 2 ligne et je souhaiterais faire un DELETE sur la ligne du Timestamp le plus récent quand le 'Type' est le même sur ces 2 lignes.
Pouvez vous m'aider svp ?
1 réponse
-
Contributeur Ambassadeurbonsoir,
essayons d'abord ceci:SELECT max(Timestamp), Type FROM orange group by Type HAVING count(*)>1;
cela te donne bien tout ce que tu veux supprimer, rien de plus, rien de moins?
note que cela ne donne pas exactement ce que tu avais décrit initialement.-
-
Merci pour ton aide,
Cela va me permettre de faire ensuite un DELETE sur la ligne du Timestamp le plus récent quand le 'Type' est le même sur ces 2 lignes ?
Sinon cela donne bien la ligne à supprimer.
SELECT max(Timestamp), Type FROM
(SELECT Timestamp, Type FROM orange ORDER BY Timestamp DESC LIMIT 0,2) as t group by Type
HAVING count(*)>1 -
Contributeur Ambassadeur@mikesunshine59suggestion pour le delete:
DELETE orange from orange, (SELECT max(Timestamp) as maxstamp, Type FROM (SELECT Timestamp, Type FROM orange ORDER BY Timestamp DESC LIMIT 0,2) as t group by Type HAVING count(*)>1) as tt WHERE orange.Type = tt.Type AND orange.Timestamp = tt.maxstamp
-
-
Contributeur Ambassadeur@mikesunshine59si je comprends bien, tu voulais faire ceci, et c'est assez inhabituel:
si les deux enregistrements les plus anciens sont de même type, supprimer le plus récent des deux.
il est plus habituel de faire cela:
ne garder, pour chaque type, que l'enregistrement le plus récent.
-