從具有內連接和LIMIT 的兩個表中進行選擇
要檢索兩個表(Service 和Status)中每個服務的最新狀態,可以利用內連線。
現有表供參考是:
服務:
列:
狀態:
列:
預期的結果是每個服務的最新狀態,如下:
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中文網其他相關文章!