Oracle SQL如何筛选8月登录且6、7月仅单月有登录记录的客户ID
Oracle SQL 筛选符合条件的客户ID实现方案
需求说明
现有客户登录记录表,包含ID(客户ID)、LOGGED(登录时间戳)两个字段,需要筛选同时满足以下两个条件的客户ID:
- 当年8月至少有1次登录记录
- 当年6月、7月两个月份中,仅在其中一个月有登录记录,不能两个月都有登录
实现SQL
直接替换语句中的你的表名为实际表名即可执行:
SELECT ID FROM 你的表名 -- 限定统计当年数据,避免往年登录记录干扰 WHERE EXTRACT(YEAR FROM LOGGED) = EXTRACT(YEAR FROM SYSDATE) GROUP BY ID HAVING -- 条件1:8月至少1次登录 COUNT(CASE WHEN EXTRACT(MONTH FROM LOGGED) = 8 THEN 1 END) >= 1 -- 条件2:SIGN函数大于0时返回1、等于0返回0,加和为1代表6、7月仅一个月有登录记录 AND SIGN(COUNT(CASE WHEN EXTRACT(MONTH FROM LOGGED) = 6 THEN 1 END)) + SIGN(COUNT(CASE WHEN EXTRACT(MONTH FROM LOGGED) = 7 THEN 1 END)) = 1;
逻辑验证
针对示例数据的统计结果:
- 客户ID 11:8月登录次数1次,6月登录次数0次,7月登录次数1次,满足两个条件,入选
- 客户ID 22:8月登录次数0次,不满足条件1,被过滤
- 客户ID 33:8月登录次数0次,不满足条件1,被过滤
最终输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

