SQL:计算仅在上周出现过的ID是否未出现
P粉529581199
P粉529581199 2023-09-07 11:58:57
[MySQL讨论组]

我正在尝试每周滚动了解用户是否参加或未参加活动。但是,我只想将他们列为“未参加”如果他们上周参加了。例如,如果用户参加了第 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 |
+-----------------+---------+
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号