删除自连接
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';
我有以下查询
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';