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 ?

1 réponse

  1. Contributeur Ambassadeur
    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. Contributeur Ambassadeur
      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. 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. 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
      0
    4. Je viens de tester et franchement bravo.

      J'adorerais avoir tes compétences.

      Encore merci.
      0
    5. 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.
      0