验证活跃用户SQL查询正确性,编写非活跃用户(7天未登录/无登录记录)SQL查询
问题:查询活跃与非活跃机构用户
需求概述
我需要完成两个查询任务:
- 查询近7天登录的活跃机构用户
- 查询近7天未登录或
last_login为NULL的非活跃机构用户
表结构与示例数据
users表(存储机构主信息)
id | first_name | email | agency_id | last_login --------------------------------------------------- 1 | Sujith | suj@suj | 19865 | 2018/03/01 2 | Naveen | nav@nav | 15098 | 2018/02/09 3 | Salin | sal@sal | 18452 | 2017/12/06
agencies表(存储机构员工信息)
id | first_name | email | name | last_login ----------------------------------------------------------- 19865 | Sujith | suj@suj | Yatra Travels | 2018/03/01 19865 | Raghav | rag@rag | Yatra Travels | 2018/02/09 15098 | Naveen | nav@nav | Travels Ltd | 2017/12/06 15098 | Monika | mon@mon | Travels Ltd | 2017/12/06 18452 | Raghu | rag@rag | MK Travels | NULL
一、活跃用户SQL验证与修正
你写的活跃用户查询片段有几个需要调整的细节:
users.last_name字段在提供的users表结构里不存在,得删掉GROUP BY在这里没必要,需求是查询符合条件的用户记录,不是按机构聚合- 日期判断可以用更直观的写法,同时确保数据库能正确识别
last_login的日期格式
修正后的完整活跃用户查询SQL:
SELECT users.first_name, users.email, users.last_login, agencies.name AS agency_name, agencies.id AS agency_id FROM users INNER JOIN agencies ON users.agency_id = agencies.id WHERE users.last_login >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND users.last_login <= NOW();
这个语句会准确筛选出近7天有登录记录的用户,同时关联对应的机构信息返回。
二、非活跃用户完整SQL
针对非活跃用户的需求,我们需要筛选出登录时间早于7天前或者**从未登录(last_login为NULL)**的用户,完整SQL如下:
SELECT users.first_name, users.email, users.last_login, agencies.name AS agency_name, agencies.id AS agency_id FROM users INNER JOIN agencies ON users.agency_id = agencies.id WHERE (users.last_login < DATE_SUB(NOW(), INTERVAL 7 DAY) OR users.last_login IS NULL);
注意:判断NULL必须用IS NULL,不能用= NULL;同时用括号把两个条件包裹起来,确保逻辑是“满足任一条件即可”。
内容的提问来源于stack exchange,提问作者Sid Menon
相关产品推荐
相关产品推荐

