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

Oracle SQL如何基于Timestamp列筛选近3个月仅登录1次的ID

Oracle SQL 实现方案

实现思路

  • 先筛选出时间范围在「当前日期往前推3个月」到当前日期的所有登录记录
  • 按ID分组统计每个ID的登录次数
  • 筛选分组后登录次数等于1的ID即可

完整SQL代码

SELECT ID
FROM 你的表名
WHERE "date" >= ADD_MONTHS(TO_TIMESTAMP('2021-09-28', 'YYYY-MM-DD'), -3)
  AND "date" <= TO_TIMESTAMP('2021-09-28 23:59:59.999', 'YYYY-MM-DD HH24:MI:SS.FF3')
GROUP BY ID
HAVING COUNT(*) = 1;

代码说明

  1. 因为date是Oracle的关键字,所以列名需要用双引号包裹避免语法报错
  2. ADD_MONTHS(TO_TIMESTAMP('2021-09-28', 'YYYY-MM-DD'), -3)计算得到3个月前的日期,也就是2021-06-28 00:00:00.000,刚好覆盖需求里的近3个月范围
  3. 如果需要直接使用系统当前时间而不是固定的2021-09-28,可以把上面的固定时间替换为SYSTIMESTAMP,写法如下:
SELECT ID
FROM 你的表名
WHERE "date" >= ADD_MONTHS(SYSTIMESTAMP, -3)
GROUP BY ID
HAVING COUNT(*) = 1;
  1. 执行后刚好得到预期的ID=11的结果:ID为11的记录里只有2021-07-01的记录在近3个月范围内,6月的记录早于2021-06-28不在统计范围内,所以统计次数为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 08:18:00