Dieses Problem stört mich jetzt seit ein paar Stunden. Nachdem ich herausgefunden hatte, dass meine alte Abfrage ein Problem hatte, musste ich es neu erstellen.Mehrere Zeilen mit demselben Bezeichner, wie wählt man die Zeile mit dem höchsten Wert (ignoriert den Rest) mit mehreren linken Joins?
Die Situation:
Ich brauche jeden patient_id mit einem clinic_id entsprechen, und dafür möchte ich bekommen alle Termine der patient_id verwenden, die höchste appointment_id finden und verwenden seine clinic_id die letzte bekannte clinic_id einstellen .
Meine alte Abfrage tat dies, aber es übersprang Patienten, die nie einen Termin hatten.
Dies sind meine aktuellen Ergebnisse, aber ich muss meine Ergebnisse filtern. Die Frage ist, wie?
+---------------+-------------------+-------------------+---------------+
| patient_id | country_code | appointment_id | clinic_id |
+---------------+-------------------+-------------------+---------------+
| 111 | UK | 620 | 3 |
| 111 | UK | 621 | 2 |
| 111 | UK | 1995 | 1 |
| 222 | UK | 609 | 3 |
| 222 | UK | 610 | 2 |
| 333 | UK | null | null |
| 444 | UK | null | null |
+---------------+-------------------+-------------------+---------------+
Was ich will, ist die folgende:
+---------------+-------------------+-------------------+---------------+
| patient_id | country_code | appointment_id | clinic_id |
+---------------+-------------------+-------------------+---------------+
| 111 | UK | 1995 | 1 |
| 222 | UK | 610 | 2 |
| 333 | UK | null | null |
| 444 | UK | null | null |
+---------------+-------------------+-------------------+---------------+
ich jetzt die folgende Abfrage verwenden:
SELECT
patient.id,
systemcountry.country_code,
appointment_patient.appointment_id,
appointment.clinic_id
FROM
patient
LEFT JOIN
systemcountry ON patient.country_id = systemcountry.id
LEFT JOIN
appointment_patient ON patient_id = patient.id
LEFT JOIN
appointment ON appointment_patient.appointment_id = appointment.id
Das war meine alte Abfrage, das ein Problem hatte so dass es zu überspringen Sie Patienten, die nie einen Termin hatten:
SELECT
patient.id AS patient_id,
systemcountry.code AS systemcountry_code,
appointment.clinic_id
FROM
patient
LEFT JOIN
systemcountry ON patient.land_id = systemcountry.id,
appointment
WHERE
appointment.id = (SELECT
MAX(appointment_id)
FROM
appointment_patient
WHERE
patient_id = patient.id);
Ich bin noch ein Anfänger, also gehen Sie einfach auf mich.
Ich schätze jeden Eingang, danke!
Hallo. Bitte zeigen Sie Ihre DDL & EXPLAIN-Ausgabe - und den Rest eines [mcve]. Untersuchen Sie auch das Tag "Größte-n-pro-Gruppe". – philipxy
Ich nahm die Verknüpfung und zwei separate Abfragen, um die Ergebnisse zu erhalten, die ich wollte. Die Abfragen wurden in einer Datenbankkonvertierungsanwendung verwendet. Danke für alle Inputs! –
Hallo. Bitte denken Sie darüber nach, eine Antwort auf Ihre Frage zu verfassen und (später) zu akzeptieren. PS Wenn es bei einer so einfachen Abfrage lange dauert, lesen Sie über Indizes. Wenn Sie MCVE gepostet hätten, dann hätten die Beantworter dies gegebenenfalls ansprechen können. – philipxy