DELETE quand 2 valeurs identiques

Résolu/Fermé
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018 - Modifié le 28 janv. 2018 à 17:33
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018 - 30 janv. 2018 à 14:30
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 janv. 2018 à 17:46
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 janv. 2018 à 17:51
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 lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
28 janv. 2018 à 18:10
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
28 janv. 2018 à 18:34
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 lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
28 janv. 2018 à 18:50
Je viens de tester et franchement bravo.

J'adorerais avoir tes compétences.

Encore merci.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
28 janv. 2018 à 19:08
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