| account_no | **other columns**...
+------------+-----------------------
| 1 |
| 2 |
| 3 |
| 4 |
表2:在查詢內部
| account_no | TX_No | Balance | History |
+------------+-------+---------+------------+
| 1 | 123 | 123 | 12.01.2011 |
| 1 | 234 | 2312 | 01.03.2011 |
| 3 | 232 | 212 | 19.02.2011 |
| 4 | 117 | 234 | 24.01.2011 |
我有多個連接查詢,其中一個表(表2)是有問題的因爲它是一個計算許多其他事物的視圖,所以對該表的每個查詢都是昂貴的。從表2中,對於每一個account_no
表1中,我需要整行以最大TX_NO
,這是我要做的事:
SELECT * FROM TABLE1 A LEFT JOIN
(SELECT
X.ACCOUNT_NO,
HISTORY,
X.BALANCE
FROM TABLE2 X INNER JOIN
(SELECT
ACCOUNT_NO,
MAX(TX_NO) AS TX_NO
FROM TABLE2
GROUP BY ACCOUNT_NO) Y ON X.ACCOUNT_NO = Y.ACCOUNT_NO) B
ON B.ACCOUNT_NO = A.ACCOUNT_NO
正如我先了解它會使內連接所有的行表2和之後,左加入需要account_no
的表1這是我想避免。
我的問題:有沒有辦法找到max(TX_NO)
只爲那些在表1而不是經歷所有的帳戶?我認爲這將有助於提高查詢的速度。
ughh,是它看起來像一個好主意,應該考慮窗口函數,我會嘗試 – Hatik
是的,它減少了一半的時間,我覺得很棒。唯一的辦法是通過執行窗口函數,就像在你的查詢中,我得到'ORA-30483:窗口函數在這裏是不允許的'錯誤。這就是爲什麼我首先使用'ROW_NUMBER().. as rn'作爲子查詢從另一個選擇中進行選擇,然後使用標準'where where rn = 1' – Hatik
@Hatik是的,你是對的,我更新了我的答案。我沒有太多的示例數據,也很難在SQLFiddle和Rextester上測試Oracle。 –