我有以下查询
SELECT h.*
FROM table1 h
LEFT JOIN table1 e
ON e.fundno = h.fundno
AND e.trantype = 'D'
AND e.modifiedon > h.modifiedon
WHERE e.fundno IS NULL
AND h.trantype != 'D'
有没有办法避免自我加入。我知道可以使用Not Exists
重写它,但我试图避免两次击中表格。
如果trantype
相同,那么我们可以使用Row_Number
来执行此操作..由于trantype
不同,我无法找到方法。
答案 0 :(得分:2)
你似乎想要非D行,而没有" D"行在laster时间修改。您可以使用窗口函数:
select h.*
from (select h.*,
max(case when h.transtype = 'D' then modifiedon end) over (partition by fundno) as last_d_modifiedon
from table1 h
) h
where (last_d_modifiedon is null or last_d_modifiedon < modifiedon) and
h.transtype <> 'D';