我有一個像(table1)這樣的會話表:
會話 ID | 發件人ID | 活動日期 |
---|---|---|
s1 | s1 | 2020-10-02 |
s2 | s1 | 2020-10-06 |
s3 | s2 | 2020-03-01 |
s4 | s2 | 2020-03-02 |
s5 | s3 | 2020-08-02 |
s6 | s4 | 2020-02-02 |
還有一個事務表(table2),例如:
交易編號 | 發件人ID | 發送日期 |
---|---|---|
t1 | s1 | 2020-10-01 |
t2 | s1 | 2020-10-05 |
t3 | s2 | 2020-04-01 |
t4 | s3 | 2020-07-02 |
t5 | s4 | 2020-12-12 |
我想生成一個表,其中僅包含在會話日期之前未進行任何交易的用戶的會話。根據上表,我想回傳:
會話 ID | 發件人ID | 活動日期 |
---|---|---|
s3 | s2 | 2020-03-01 |
s4 | s2 | 2020-03-02 |
s6 | s4 | 2020-02-02 |
我想使用 Anti-Join 解決這個問題。下面的代碼會為此目的作業嗎?
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t2.sender_id = t1.sender_id
AND t2.event_date > t1.event_date
WHERE t2.sender_id IS NULL
請隨意提出除反加入以外的任何方法。謝謝!
uj5u.com熱心網友回復:
您可以使用EXISTS
如下:
select *
from t1
where not exists (
select 1
from t2
where t2.sender_id = t1.sender_id and t2.send_date < t1.event_date
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485853.html
下一篇:Oracle各部門平均工資