You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询昨日读经但今日未读的用户,现有查询结果错误如何修正?

现有逻辑的错误

你写的WHERE条件是针对单条行记录生效的,无法实现跨同用户的多条记录做判断:单条记录的date_read只能是一个日期,只要这条记录日期是2021-11-25,天然就不等于2021-11-26,所以这个条件会把所有11月25日有读经记录的用户都查出来(也就是user2和user3都命中),完全没过滤掉「11月26日也有读经记录」的用户。

修正后的查询方案

方案1:分组聚合判断(写法简单易读)

SELECT user_id
FROM `user_bible_trackings`
GROUP BY user_id
HAVING MAX(CASE WHEN date_read = '2021-11-25' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN date_read = '2021-11-26' THEN 1 ELSE 0 END) = 0;

逻辑说明:按用户分组后,判断该用户的所有记录里,存在11月25日的记录,同时不存在11月26日的记录。

方案2:LEFT JOIN关联判断

SELECT DISTINCT t1.user_id
FROM `user_bible_trackings` t1
LEFT JOIN `user_bible_trackings` t2
  ON t1.user_id = t2.user_id AND t2.date_read = '2021-11-26'
WHERE t1.date_read = '2021-11-25'
AND t2.user_id IS NULL;

逻辑说明:先找出所有11月25日有读经记录的用户,左关联11月26日的读经记录,关联不到的就是26日没读的用户。

方案3:NOT EXISTS子查询(性能表现通常更好)

SELECT DISTINCT user_id
FROM `user_bible_trackings` t1
WHERE t1.date_read = '2021-11-25'
AND NOT EXISTS (
  SELECT 1 FROM `user_bible_trackings` t2
  WHERE t2.user_id = t1.user_id AND t2.date_read = '2021-11-26'
);

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:36:04