我有两个mysql dbs: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
但我无法达到它,我只获得一条记录,我不知道如何获得它,请有人帮助我吗? 非常感谢。
答案 0 :(得分: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列。