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

Informix查询:筛选恰好两条记录且fechaModificacion间隔≤1年的idPersona

Informix 查询:找出恰好有两条记录且修改日期间隔不超过一年的idPersona

方法一:自连接 + 分组筛选

通过自连接配对同一用户的两条记录,同时筛选出记录数恰好为2且日期间隔符合要求的用户:

SELECT p1.idPersona
FROM PARTICIPACION p1
INNER JOIN PARTICIPACION p2 
    ON p1.idPersona = p2.idPersona 
    AND p1.idParticipacion < p2.idParticipacion
WHERE 
    -- 排除修改日期为空的记录,避免无法计算间隔
    p1.fechaModificacion IS NOT NULL 
    AND p2.fechaModificacion IS NOT NULL
    -- 计算两条记录的修改日期间隔不超过1年
    AND (p2.fechaModificacion - p1.fechaModificacion) <= INTERVAL(1) YEAR TO YEAR
GROUP BY p1.idPersona
-- 确保该用户恰好只有两条记录(自连接后仅产生1组配对)
HAVING COUNT(*) = 1

方法二:窗口函数(Informix 12.10+ 支持)

利用窗口函数统计用户的记录数,并获取下一条记录的修改日期,再筛选符合条件的用户:

WITH persona_records AS (
    SELECT
        idPersona,
        fechaModificacion,
        -- 统计当前用户的总记录数
        COUNT(*) OVER (PARTITION BY idPersona) AS record_count,
        -- 获取同用户下一条记录的修改日期
        LEAD(fechaModificacion) OVER (PARTITION BY idPersona ORDER BY fechaModificacion) AS next_mod_date
    FROM PARTICIPACION
    WHERE fechaModificacion IS NOT NULL
)
SELECT DISTINCT idPersona
FROM persona_records
WHERE 
    -- 仅保留恰好有两条记录的用户
    record_count = 2
    -- 验证两条记录的修改日期间隔不超过1年
    AND (next_mod_date - fechaModificacion) <= INTERVAL(1) YEAR TO YEAR

说明

  • 两种方法都处理了fechaModificacion为NULL的情况,空值无法计算日期间隔,这类记录会被排除。
  • Informix中datetime类型相减会得到interval类型,直接与INTERVAL(1) YEAR TO YEAR比较即可判断间隔是否不超过1年。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:02:47