我正在嘗試每週滾動(dòng)了解用戶是否參加或未參加活動(dòng)。但是,我只想將他們列為“未參加”如果他們上週參加了。例如,如果使用者參加了第 1 週和第 7 週,則他們?cè)诘?2 週和第 8 週將僅被計(jì)為「未參加」。
資料的簡(jiǎn)化範(fàn)例:
表事件,其中包含所有事件日期(每週)和唯一事件 ID(時(shí)間升序)
Event_Date | Event_ID |
---|---|
2023-03-09 | 1 |
2023-03-16 | 2 |
2023-03-23 | 3 |
表格使用者顯示他們參加的活動(dòng)日期和 ID:
Event_Date | Event_ID | User_ID |
---|---|---|
2023-03-09 | 1 | 151 |
2023-03-16 | 2 | 151 |
2023-03-23 | 3 | 151 |
2023-03-09 | 1 | 299 |
2023-03-23 | 3 | 299 |
2023-03-16 | 2 | 373 |
我的問題:如何使用 SQL 完成以下輸出? (用戶299參加了活動(dòng)1,但未參加活動(dòng)2;用戶373參加了活動(dòng)2,但未參加活動(dòng)3)
Missed_Event_Date | Missed_Event_ID | #User_ID |
---|---|---|
2023-03-16 | 2 | 299 |
2023-03-23 | 3 | 373 |
我嘗試過使用
SELECT Event_ID + 1, User_ID FROM users u WHERE NOT EXISTS (SELECT 1 FROM events WHERE u.Event_ID=e.Event_ID + 1)
沒有產(chǎn)生正確的輸出
假設(shè) Event_ID
增加 1,您也可以考慮以下內(nèi)容。
SELECT u.Event_ID + 1 AS Missed_Event_ID, u.User_ID FROM users u LEFT JOIN users v ON u.User_ID = v.User_ID AND u.Event_ID + 1 = v.Event_ID WHERE v.Event_ID IS NULL AND u.Event_ID < (SELECT MAX(Event_ID) FROM events); -- Query results +-----------------+---------+ | Missed_Event_ID | User_ID | +-----------------+---------+ | 2 | 299 | | 3 | 373 | +-----------------+---------+