SQL:计算仅在上周出现过的ID是否未出现
P粉529581199
P粉529581199 2023-09-07 11:58:57
0
1
514

我正在尝试每周滚动了解用户是否参加或未参加活动。但是,我只想将他们列为“未参加”如果他们上周参加了。例如,如果用户参加了第 1 周和第 7 周,则他们在第 2 周和第 8 周将仅被计为“未参加”。

数据的简化示例:

事件,其中包括所有事件日期(每周)和唯一事件 ID(时间升序)

Event_Date Event_ID
2023-03-09 1
2023-03-16 2
2023-03-23 3

用户显示他们参加的活动日期和 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参加了活动1,但未参加活动2;用户373参加了活动2,但未参加活动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)

没有产生正确的输出

P粉529581199
P粉529581199

全部回复(1)
P粉818561682

假设 Event_ID 增加 1,您也可以考虑以下内容。

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 |
+-----------------+---------+
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板