データベースを検索して特定の問題に挿入された同じテーブル内の2つのレコードを検索しようとしています。これは、システムでいくつかの最適化が行われなければならない場所を教えてくれるでしょう。同じテーブルの2つのレコード間の結合を最適化する
私は、クエリの多くを試してみましたが、一つは最終的に私の右の結果を与えた:
SELECT woh.*
FROM workorderhistory woh
WHERE woh.operation = 'REQ_CONVER' AND woh.operationtime > (
SELECT MAX(woh2.operationtime) FROM workorderhistory woh2 WHERE woh2.operation = 'CLOSE'
) AND woh.workorderid = woh2.workorderid
ORDER BY woh.workorderid DESC
LIMIT 100
しかしこの1つは16000 RECORDSに、1,5時間かかりました... だから、間違いがないためです私...
クエリの最大の問題は、私の基準を最新のclosed
レコードと一致させることだけです。
、クエリは簡単です:
SELECT woh.*
FROM workorderhistory woh
INNER JOIN workorderhistory woh2
ON woh.workorderid = woh2.workorderid
WHERE woh.operation = 'REQ_CONVER' AND woh2.operation = 'CLOSE' AND woh.operationtime > woh2.operationtime
は、しかし、私は最初の最後に閉じられたレコードを取得する必要があります。これは私が必要とする比較記録です。
私はINNERがサブクエリとJOINを使用してこれをやってみました:
SELECT woh.*, woh2.operationtime AS woh2operationtime, woh2.operationtime AS woh2operationtime
FROM workorderhistory woh
INNER JOIN (SELECT workorderid, operationtime FROM workorderhistory WHERE operation = 'CLOSE' ORDER BY historyid DESC LIMIT 1) woh2
ON woh.workorderid = woh2.workorderid AND woh2.operationtime < woh.operationtime
WHERE woh.operation = 'REQ_CONVER'
ORDER BY woh.workorderid ASC
LIMIT 100
しかし、それが正しい結果を返しませんでした、それはまだ最初のCLOSE
レコードを使用しました。
PostgresSQLのこの(imo super-simple)クエリを最適化する方法はありますか?
各workorderidの最終的なCLOSEレコードのみが必要ですか?それともその後に来るレコード? – wildplasser