[英]Select SQL Inner Join and Omit Certain Record
我有兩個表,其中包含以下數據:
表A
ID DESC
1 One
2 Two
3 Three
ID是主鍵
表B顯示了我對表A中的ID執行的操作
NO ACTION ID DATETIME
1 ADD 1 2012-01-01 00:00:00
2 ADD 2 2012-01-01 00:00:00
3 ADD 3 2012-01-01 00:00:00
4 DELETE 2 2012-01-01 01:00:00
5 EDIT 1 2012-01-01 02:00:00
6 EDIT 3 2012-01-01 03:00:00
7 DELETE 1 2012-01-01 03:00:00
8 REVIVE 2 2012-01-01 04:00:00
9 EDIT 2 2012-01-01 05:00:00
NO是主鍵
這是摘要:
ID 1:在2012-01-01 00:00:00上添加,在2012-01-01 02:00:00上進行編輯,在2012-01-01 03:00:00上進行DELETE
ID 2:在2012-01-01 00:00:00上添加,在2012-01-01 01:00:00上刪除,在2012-01-01 04:00:00上恢復,在2012-01-01 05上進行編輯:00:00
ID 3:在2012-01-01 00:00:00添加,在2012-01-01 03:00:00編輯
我如何查詢表以獲得以下結果:
表C
NO DESC
2 Two
3 Three
我想做的是:查詢表A在最后一次交易時沒有DELETE操作,因此我只能得到活動ID
我嘗試進行內部聯接,但在如何忽略ID上陷入僵局,該ID在最后一次交易時具有刪除操作。 任何建議/評論將不勝感激。
你可以試試這個
select ID, DESC
from A join (
select id, action, rank() over (partition by id order by datetime desc) ranking
from B
) B on (B.ranking = 1 and B.id = A.id and B.action <> 'DELETE')
假設TableB
的主鍵不是NO
,則根據DATETIME
排序:
select
TableA.ID, TableA.DESC
from TableA inner join
(select ID, max(NO) as MaxNO from TableB group by ID) as MaxNOs
on TableA.ID = MaxNOs.ID
inner join TableB on MaxNOs.ID = TableB.ID and MaxNOs.MaxNO = TableB.NO
where
TableB.ACTION <> 'DELETE'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.