次のようなOracleのクエリがあります。
SELECT
t1.tid, t1.column1, t1.column2
FROM
table1 t1
JOIN
log_table lg ON t1.tid = lg.tid
WHERE
t1.insert_date > lg.date_of_insert
AND lg.log_id = (SELECT MAX(log_for_last.log_id) FROM log_table log_for_last WHERE lg.tid = log_for_last.tid)
AND t1.insert_date = (SELECT MAX(t1_last_date.insert_date) FROM table1 t1_last_date WHERE t1_last_date.tid = t1.tid);
しかし、完了するまでに多くの時間がかかります。問題は次の行にあります。
AND t1.insert_date = (SELECT MAX(t1_last_date.insert_date) FROM table1 t1_last_date WHERE t1_last_date.tid = t1.tid);
t1.tidは一意である必要があります。このクエリを最適化するにはどうすればよいですか?
編集:
私は次のことを試みましたが、それは私にSQLエラーを与えます: ORA-00904: "RN": 無効な識別子エラー:
SELECT
t1.tid, t1.column1, t1.column2,
ROW_NUMBER() OVER (ORDER BY t1.insert_date DESC) rn
FROM
table1 t1
JOIN
log_table lg ON t1.tid = lg.tid
WHERE
t1.insert_date > lg.date_of_insert
AND lg.log_id = (SELECT MAX(log_for_last.log_id) FROM log_table log_for_last WHERE lg.tid = log_for_last.tid)
AND rn = 1
前もって感謝します