| 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。 –