suchen

Heim  >  Fragen und Antworten  >  Hauptteil

MYSQL-Gruppierung nach letztem Wert, aber bedingt

Ich werde meine Situation erklären. MySQL 5.7

Ich habe 2 Tabellen: Registry und Mobile. Diese beiden Tische haben IDMovement gemeinsam, sodass ich mich ihnen anschließen kann

Meine Frage: Ich muss nach der Spalte Registry gruppieren (die eine Varchar-Spalte ist) und ich muss MAX IDMovement überprüfen. In dieser Zeile gibt es eine weitere Spalte namens IDCausal. Überspringen, wenn MAX IDMovement auf IDCasual von 21 abweicht. Andernfalls wird die Zeile zurückgegeben.

Ich gebe ein Beispiel dafür, was ich getan habe:

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

P.S. WO ist nur ein Beispiel, ich muss jede Registrierung abfragen.

Der Rückgabewert der Registrierung 2SST0160 ist:

IDMovement   IDCausal  Registry
5550         21        2SST0160
9817         5         2SST0160

Im Beispiel beträgt der MAX IDMovement 9817, aber der IDCausal ist 5, sodass das erwartete Ergebnis der Abfrage in diesem Beispiel NICHTS ist. Wenn IDCausal 21 ist, sind das erwartete Ergebnis nur Zeilen mit 21. Für jede Registrierung erwarte ich, dass das Ergebnis 0 oder 1 Zeile pro Registrierung ist.

Ich hoffe, ich habe es klar ausgedrückt, vielen Dank für Ihre Hilfe!

P粉037450467P粉037450467447 Tage vor447

Antworte allen(1)Ich werde antworten

  • 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;

    Antwort
    0
  • StornierenAntwort