2013-02-18 115 views
1

我有两个MySQL DBS:db_system和db_events,并 我需要为每个设备获得的最后一个事件(db_events)(db_system)查询两个DBS与子查询

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

删除LIMIT 1? – DarkAjax 2013-02-18 21:08:47

+0

如果我删除限制,我得到了每个设备的很多记录,而不是每个设备的最后一个..我只需要每个设备的最后一个 – user1913878 2013-02-18 21:10:46

回答

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下去 - 我刚离开那里的情况下,这就是你想要的结果。

此外,这确实假定最大(Id)是什么决定了您的每个设备的最新事件 - 我假设这是因为您是由上面的id DESC命令。如果不是,则可以使用DateTime列而不是相同的逻辑。

+0

嗨@sgeddes我收到错误代码:1054.未知列' db_events.events.device_id'in'IN/ALL/ANY subquery' – user1913878 2013-02-18 21:37:42

+0

@ user1913878 - 我刚刚复制了你的原始查询 - 我编辑了我的查询以上使用表别名 - 看看这是行不通的:) – sgeddes 2013-02-18 21:40:36

+0

原始查询不失败,错过了一些东西.. – user1913878 2013-02-18 21:52:58