DELETE quand 2 valeurs identiques

Résolu
mikesunshine59 Messages postés 75 Statut Membre -  
mikesunshine59 Messages postés 75 Statut Membre -
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 ?

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
    2. mikesunshine59 Messages postés 75 Statut Membre
       
      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
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mikesunshine59 Messages postés 75 Statut Membre
       
      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
    4. mikesunshine59 Messages postés 75 Statut Membre
       
      Je viens de tester et franchement bravo.

      J'adorerais avoir tes compétences.

      Encore merci.
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mikesunshine59 Messages postés 75 Statut Membre
       
      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