删除自连接

Removing Self Join

我有以下查询

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 重写,但我试图避免两次点击 table..

如果 trantype 相同,那么我们可以使用 Row_Number 来做到这一点..因为 trantype 不同,我找不到方法..

您似乎想要在以后没有修改 [=13th=] 行的非 D 行。您可以使用 window 函数:

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';