1

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

但是我无法获得它,我只获得了一张唱片,我不知道如何获得它,请有人帮助我吗?非常感谢。

4

1 回答 1

1

这应该使用MAX(Id)每个 Device_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 列。

于 2013-02-18T21:12:17.337 回答