首页  >  问答  >  正文

SQL:计算仅在上周出现过的ID是否未出现

我正在尝试每周滚动了解用户是否参加或未参加活动。但是,我只想将他们列为“未参加”如果他们上周参加了。例如,如果用户参加了第 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粉529581199P粉529581199432 天前470

全部回复(1)我来回复

  • P粉818561682

    P粉8185616822023-09-08 11:03:22

    假设 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 |
    +-----------------+---------+
    

    回复
    0
  • 取消回复