我有兩個表格 Service
和 Status
。服務表只保存一個name
和一個id
| id | name | |----|-------| | 1 | Test1 | | 2 | Test2 |
還有一個像這樣的狀態表
| id | status | service_id | timestamp | |----|--------|------------|---------------------------| | 1 | OK | 1 | October, 15 2015 09:03:07 | | 2 | OK | 1 | October, 15 2015 09:08:07 | | 3 | OK | 2 | October, 15 2015 10:05:23 | | 4 | OK | 2 | October, 15 2015 10:15:23 |
我想取得這樣的資料
| 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
但我只得到
| id | name | status | timestamp | |----|-------|--------|---------------------------| | 2 | Test2 | OK | October, 15 2015 10:15:23 |
如何更改語句以獲得我想要的?
用來測試 SQL Fiddle
對於每項服務,僅當不存在後續服務時,才使用
NOT EXISTS
傳回狀態:可以選擇執行
LEFT JOIN
來傳回沒有任何狀態的服務。如果不需要,請切換到JOIN
。你可以這樣做:
與子查詢的連接:
將消除除最新日期之外的所有狀態。