簡體   English   中英

選擇SQL內部聯接並省略某些記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM