Maison  >  Questions et réponses  >  le corps du texte

Groupe MYSQL par dernière valeur mais sous condition

Je vais vous expliquer ma situation. MySQL 5.7

J'ai 2 tables : Registre et Mobile. Ces deux tables ont IDMovement en commun donc je peux les rejoindre

Ma question : Je dois regrouper par colonne Registry (qui est une colonne varchar) et je dois vérifier MAX IDMovement. Dans cette ligne, il y a une autre colonne appelée IDCausal. Ignorer si MAX IDMovement sur IDCasual est différent de 21. Sinon, retournez la ligne.

Je vais donner un exemple de ce que j'ai fait :

SELECT
    m.IDMovement,
    mo.IDCausal,
    m.Registry 
FROM
    registry m
    JOIN movement mo ON m.IDMovement = mo.IDMovement 
WHERE
    m.Registry = "2SST0160"

P.S. WHERE n'est qu'un exemple, je dois interroger chaque registre.

La valeur de retour du registre 2SST0160 est :

IDMovement   IDCausal  Registry
5550         21        2SST0160
9817         5         2SST0160

Dans l'exemple, le MAX IDMovement est 9817, mais le IDCausal est 5, donc le résultat attendu de la requête dans cet exemple n'est RIEN. Si IDCausal vaut 21, le résultat attendu est uniquement des lignes de 21. Pour chaque registre, je m'attends à ce que le résultat soit 0 ou 1 ligne par registre.

J'espère avoir été clair, merci pour votre aide !

P粉037450467P粉037450467401 Il y a quelques jours410

répondre à tous(1)je répondrai

  • P粉165522886

    P粉1655228862023-09-15 00:13:19

    WITH newtable AS ( SELECT
        m.IDMovement,
        mo.IDCausal,
        m.Registry
    FROM
        registry m
        JOIN movement mo ON m.IDMovement = mo.IDMovement
    WHERE
        m.Registry = '2SST0160' )
    SELECT * FROM newtable
        WHERE (SELECT IDCausal FROM newtable ORDER BY IDMovement DESC LIMIT 1) = 21
        ORDER BY IDMovement DESC LIMIT 1;

    répondre
    0
  • Annulerrépondre