用subselect查询两个dbs

时间:2013-02-18 21:06:54

标签: mysql sql

我有两个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

但我无法达到它,我只获得一条记录,我不知道如何获得它,请有人帮助我吗? 非常感谢。

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列。