Ich habe zwei Tische Service
和 Status
。服务表只保存一个name
和一个id
| id | name | |----|-------| | 1 | Test1 | | 2 | Test2 |
Es gibt auch eine Statustabelle wie diese
| 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 |
Ich möchte solche Daten erhalten
| id | name | status | timestamp | |----|-------|--------|---------------------------| | 1 | Test1 | OK | October, 15 2015 09:08:07 | | 2 | Test2 | OK | October, 15 2015 10:15:23 |
Aktuellster Stand mit Servicedaten. Ich habe diese Aussage ausprobiert
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
Aber alles was ich bekam war
| id | name | status | timestamp | |----|-------|--------|---------------------------| | 2 | Test2 | OK | October, 15 2015 10:15:23 |
Wie ändere ich die Aussage, um das zu bekommen, was ich will?
Zum Testen von SQL Fiddle
对于每项服务,仅当不存在后续服务时,才使用
NOT EXISTS
返回状态:可以选择执行
LEFT JOIN
来返回没有任何状态的服务。如果不需要,请切换到JOIN
。你可以这样做:
与子查询的连接:
将消除除最新日期之外的所有状态。