首頁 >資料庫 >mysql教程 >如何使用 Inner Join 和 LIMIT 檢索每個服務的最新狀態?

如何使用 Inner Join 和 LIMIT 檢索每個服務的最新狀態?

Patricia Arquette
Patricia Arquette原創
2025-01-04 12:02:35338瀏覽

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

從具有內連接和LIMIT 的兩個表中進行選擇

要檢索兩個表(Service 和Status)中每個服務的最新狀態,可以利用內連線。

現有表供參考是:

  • 服務:

    • 列:

      • id:整數
      • 名稱:字符串
  • 狀態:

    • 列:

      • id :整數
      • 狀態: String
      • service_id: Integer
      • timestamp: DateTime

預期的結果是每個服務的最新狀態,如下:

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

之前的語句有限制在檢索最新狀態時:

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

為了確保正確選擇最新狀態,需要使用子查詢來識別每個服務的最大時間戳:

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

此子查詢建立一個包含兩列的新表:service_id和 MaxDate。 MaxDate 欄位代表每個服務的最新時間戳記。

使用此子查詢,可以修改主查詢以將Service 表與最大時間戳表連接起來:

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;

透過連接service_id 和MaxDate 都會顯示每個服務的最新狀態,確保達到預期的結果。

以上是如何使用 Inner Join 和 LIMIT 檢索每個服務的最新狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn