Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von Inner Join und LIMIT den neuesten Status für jeden Dienst abrufen?

Wie kann ich mithilfe von Inner Join und LIMIT den neuesten Status für jeden Dienst abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 12:02:35338Durchsuche

How to Retrieve the Latest Status for Each Service Using Inner Join and LIMIT?

Auswahl aus zwei Tabellen mit Inner Join und LIMIT

Um den neuesten Status für jeden Dienst in zwei Tabellen abzurufen, Dienst und Status, an Inner Join kann verwendet werden.

Als Referenz dienen die vorhandenen Tabellen sind:

  • Dienst:

    • Spalten:

      • ID: Ganzzahl
      • Name: String
  • Status:

    • Spalten:

      • id: Ganzzahl
      • status: String
      • service_id: Ganzzahl
      • Zeitstempel: DateTime

Das gewünschte Ergebnis ist der aktuelle Status für jeden Dienst, wie unten dargestellt:

id name status timestamp
1 Test1 OK October, 15 2015 09:08:07
2 Test2 OK October, 15 2015 10:15:23

Die vorherige Aussage hatte Einschränkungen beim Abrufen der neuesten Version Status:

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 die korrekte Auswahl des neuesten Status sicherzustellen, ist eine Unterabfrage erforderlich, um den maximalen Zeitstempel für jeden Dienst zu ermitteln:

SELECT
  service_id, 
  MAX(timestamp) AS MaxDate
FROM status 
GROUP BY service_id

Diese Unterabfrage erstellt eine neue Tabelle mit zwei Spalten: service_id und MaxDate. Die Spalte „MaxDate“ stellt den neuesten Zeitstempel für jeden Dienst dar.

Mit dieser Unterabfrage kann die Hauptabfrage geändert werden, um die Service-Tabelle mit der Tabelle mit dem maximalen Zeitstempel zu verknüpfen:

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;

Durch Beitritt am Sowohl für die service_id als auch für das MaxDate wird nur der aktuelle Status für jeden Dienst angezeigt, um das gewünschte Ergebnis sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Inner Join und LIMIT 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