2013-08-14 3 views
0

У меня есть таблица истории, и мне нужно получить последний известный статус для каждого идентификатора ресурса. Вот мой текущий запрос:Нужно несколько полей из верхней строки подзапроса из MySQL

SELECT a.AutoID AS AssetID, 
(SELECT LastFound FROM Device_Status_History b WHERE a.AutoID = b.AssetID ORDER BY AutoID DESC LIMIT 0,1) LastFound, 
(SELECT CheckDate FROM Device_Status_History c WHERE a.AutoID = c.AssetID ORDER BY AutoID DESC LIMIT 0,1) CheckDate 
FROM (SELECT AutoID FROM Devices UNION SELECT AutoID FROM Switches) a 

Союз подзапрос получает все идентификаторы активов, которые я забочусь знать, а затем я использую два других подзапросов, чтобы получить столбцы LastFound и CheckDate из таблицы истории. В целом, это работает очень хорошо, но я хотел бы иметь возможность комбинировать два подзапроса истории, если это возможно, возможно, даже сделать это присоединение каким-то образом, но я не знаю, как я могу присоединиться, продолжая использовать лимит. Мы запускаем это на малине Pi, поэтому желательно сжать каждую унцию производительности, которую мы можем из этого сделать.

ответ

0

Не знаю, если это быстрее ... Но дать ему попробовать:

SELECT AssetID, LastFound, CheckDate 
FROM Device_Status_History 
WHERE AssetID IN (SELECT AutoID FROM Devices UNION SELECT AutoID FROM Switches) 
AND AutoID IN (SELECT MAX(AutoID) FROM Device_Status_History GROUP BY AssetID); 

Также обратите внимание, что если у вас нет других AssetID в твоей Device_Status_History стол в стороне от тех, в Devices и Switches таблицы, вы можете оставить третью строчку, так что запрос будет выглядеть так:

SELECT AssetID, LastFound, CheckDate 
FROM Device_Status_History 
WHERE AutoID IN (SELECT MAX(AutoID) FROM Device_Status_History GROUP BY AssetID); 
+0

так просто, я стесняюсь, я не думаю об этом. Благодаря! – SanMadJack

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