Neueste Statusdaten mit Inner Join und Limit
Diese Herausforderung besteht darin, den neuesten Status für jeden Dienst aus zwei Tabellen abzurufen: Dienst und Status. Die Service-Tabelle enthält Serviceinformationen, während die Statustabelle Statusaktualisierungen mit zeitgestempelten Datensätzen enthält.
Um dies zu erreichen, kann ein innerer Join verwendet werden, um die Tabellen basierend auf der Spalte „service_id“ zu kombinieren. Die Herausforderung besteht jedoch bei der Auswahl des aktuellen Status für jeden Dienst. Die folgende Anweisung ruft nur den neuesten Status für den letzten Dienst ab:
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
Um den neuesten Status für jeden Dienst abzurufen, ist eine verschachtelte Abfrage erforderlich:
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status as s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
Die verschachtelte Abfrage ruft ab der maximale Zeitstempel für jeden Dienst, der den neuesten Status für diesen Dienst darstellt. Die Ergebnisse werden dann mit der Hauptabfrage zusammengeführt, um die neuesten Statusdaten für jeden Dienst anzuzeigen.
Mit diesem Ansatz wird die gewünschte Ausgabe erreicht:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von SQL-Joins den neuesten Status für jeden Dienst abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!