具有内部联接和限制的最新状态数据
此挑战涉及从两个表中检索每个服务的最新状态:服务和状态。 Service 表包含服务信息,而 Status 表保存带有时间戳记录的状态更新。
要实现此目的,可以使用内部联接基于 service_id 列来组合表。然而,在为每项服务选择最新状态时就会出现挑战。以下语句仅检索最后一个服务的最新状态:
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 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;
嵌套查询检索每个服务的最大时间戳,代表该服务的最新状态。然后将结果与主查询连接起来,以显示每个服务的最新状态数据。
使用这种方法,可以实现所需的输出:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
以上是如何使用 SQL 连接检索每个服务的最新状态?的详细内容。更多信息请关注PHP中文网其他相关文章!