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

+0

Если я удаляю LIMIT, я получаю много записей каждого устройства, а не последнее для каждого ... и мне нужно только последнее для каждого – user1913878

ответ

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 вместо той же логики.

+0

Привет @sgeddes Я получаю код ошибки: 1054. Неизвестный столбец ' db_events.events.device_id 'in' IN/ALL/ANY subquery ' – user1913878

+0

@ user1913878 - Я только что скопировал ваш исходный запрос - я отредактировал мой запрос выше, чтобы вместо этого использовать псевдонимы таблицы - посмотрите, не работает ли это :) – sgeddes

+0

Исходный запрос не подлежит, что-то пропущено. – user1913878

Смежные вопросы