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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:04