Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von SQL-Joins den neuesten Status für jeden Dienst abrufen?

Wie kann ich mithilfe von SQL-Joins den neuesten Status für jeden Dienst abrufen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 22:16:44863Durchsuche

How to Retrieve the Latest Status for Each Service Using SQL Joins?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn