2017-07-28 64 views
0

我有以下查詢刪除自加入

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不同的是我能不能找到一種方法要做到這一點..

+5

如果您描述查詢應該做什麼,它實際上會有所幫助。 –

回答

2

你似乎想要非D行,其中沒有「D」行在激光時間修改。您可以使用窗口函數:

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