我有两个 mysql 数据库:db_system 和 db_events,以及 我需要为每个设备 (db_system) 获取最后一个事件 (db_events)
SELECT * FROM db_events.events WHERE db_events.events.device_id IN (
SELECT device_id
FROM db_system.devices
WHERE db_system.devices.vendor = 1)
ORDER BY db_events.events.id DESC LIMIT 1
但是我无法获取它,我只有一条记录,我不知道如何获取它,请有人帮助我吗? 非常感谢。
最佳答案
这应该对每个 Device_ID 使用 MAX(Id)
:
SELECT e.*
FROM db_events.events e
JOIN (
SELECT Max(id) MaxId, device_id
FROM db_events.events
GROUP BY device_id ) e2 on e.Id = e2.MaxId AND e.device_id = e2.device_id
WHERE e.device_id IN (
SELECT device_id
FROM db_system.devices
WHERE vendor = 1)
ORDER BY e.id DESC
您可能不再需要 ORDER BY —— 我只是把它留在那里,以防您想要这样的结果。
此外,这确实假设 Max(Id) 决定了每个设备的最新事件——我假设这是因为您是按上面的 id DESC 订购的。如果没有,您可以使用具有相同逻辑的 DateTime 列。
关于mysql - 使用子选择查询两个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945280/