0

履歴テーブルがあり、各アセット ID の最新の既知のステータスを取得する必要があります。これが私の現在のクエリです:

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

ユニオン サブクエリは、知りたい資産 ID をすべて取得し、他の 2 つのサブクエリを使用して、履歴テーブルから LastFound 列と CheckDate 列を取得します。全体として、これはかなりうまく機能しますが、可能であれば 2 つの履歴サブクエリを結合できるようにしたいと考えています。これを Raspberry Pi で実行しているので、パフォーマンスを最大限に引き出すことが望ましいです。

4

1 に答える 1

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、3Device_Status_History行目を省略できるので、クエリは次のようになります。DevicesSwitches

SELECT AssetID, LastFound, CheckDate
FROM Device_Status_History
WHERE AutoID IN (SELECT MAX(AutoID) FROM Device_Status_History GROUP BY AssetID);
于 2013-08-14T18:12:07.070 に答える