从具有内连接和 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中文网其他相关文章!