2013-02-18 72 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