DELETE quand 2 valeurs identiques

Résolu
mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -  
mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -
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 ?
A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir,
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.
1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
ce que tu as décrit conduirait plutôt à ceci:
SELECT max(Timestamp), Type FROM 
     (SELECT Timestamp, Type FROM orange ORDER BY Timestamp LIMIT 0,2) as t group by Type
HAVING count(*)>1;
0
mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
suggestion 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
0
mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Je viens de tester et franchement bravo.

J'adorerais avoir tes compétences.

Encore merci.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mikesunshine59 Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
si 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.
0