MYSQL-Gruppierung nach letztem Wert, aber bedingt
P粉037450467
P粉037450467 2023-09-14 15:37:56
0
1
434

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粉037450467
P粉037450467

Antworte allen(1)
P粉165522886
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;
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage