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

SQL计算理赔系统入站出站邮件操作间隔天数问题咨询

理赔系统邮件回复间隔天数计算方案

需求说明

  • 统计入站邮件(ActionType='IE',收件)与后续出站邮件(ActionType='SE',发件)的日期间隔
  • 匹配逻辑:连续多封入站邮件后出现出站邮件时,仅将出站邮件与连续入站序列的最后一封入站邮件配对,序列内其余入站邮件不参与计算
  • 过滤规则:后续无对应出站邮件的入站记录不返回结果

示例数据

-- 测试样例数据
SELECT 1 AS RowNo
        , '123456' AS AccountNumber
        , 'IE' AS ActionType
        , 'Incoming Email' AS ActionDesc
        , '2022-05-03 09:19:33.000' AS DateTimeRecevied
        , '' AS DaysToReply
UNION ALL
SELECT 2 AS RowNo
        ,'123456' AS AccountNumber
        , 'IE' AS ActionType
        , 'Incoming Email' AS ActionDesc
        , '2022-05-21 10:07:22.000' AS DateTimeRecevied
        , '' AS DaysToReply
UNION ALL
SELECT 3 AS RowNo
        , '123456' AS AccountNumber
        , 'SE' AS ActionType
        , 'Send Email' AS ActionDesc
        , '2022-05-22 10:13:08.000' AS DateTimeRecevied
        , '1' AS DaysToReply
UNION ALL
SELECT 4 AS RowNo
        , '123456' AS AccountNumber
        , 'IE' AS ActionType
        , 'Incoming Email' AS ActionDesc
        , '2022-06-22 14:01:54.000' AS DateTimeRecevied
        , '' AS DaysToReply

实现方案

该场景属于SQL经典的Gaps and Islands(间隔与岛屿)问题,通过窗口函数给连续同类型操作分组后关联匹配即可,以下是SQL Server环境下的可运行代码:

WITH ActionWithGroup AS (
    SELECT 
        *,
        -- 操作类型切换时分组ID累加,为连续同类型操作生成唯一分组标识
        SUM(
            CASE WHEN ActionType != LAG(ActionType,1,'') OVER (PARTITION BY AccountNumber ORDER BY DateTimeRecevied) 
            THEN 1 ELSE 0 END
        ) OVER (
            PARTITION BY AccountNumber 
            ORDER BY DateTimeRecevied 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS GroupId
    FROM ClaimAction -- 替换为你的实际业务表名
),
GroupAgg AS (
    SELECT 
        AccountNumber,
        GroupId,
        ActionType,
        MAX(DateTimeRecevied) AS GroupLastActionTime
    FROM ActionWithGroup
    GROUP BY AccountNumber, GroupId, ActionType
)
SELECT 
    se.AccountNumber,
    ie.GroupLastActionTime AS LastIncomingEmailTime,
    se.GroupLastActionTime AS OutgoingEmailTime,
    DATEDIFF(day, ie.GroupLastActionTime, se.GroupLastActionTime) AS DaysToReply
FROM GroupAgg se
INNER JOIN GroupAgg ie 
    ON se.AccountNumber = ie.AccountNumber
    AND se.GroupId = ie.GroupId + 1
    AND ie.ActionType = 'IE'
WHERE se.ActionType = 'SE'

结果验证

针对上述测试样例,查询返回结果如下:

AccountNumberLastIncomingEmailTimeOutgoingEmailTimeDaysToReply
1234562022-05-21 10:07:22.0002022-05-22 10:13:08.0001

结果完全符合规则:

  • 2022-05-03的入站邮件属于连续入站序列的非最后一条,不返回
  • 2022-05-21的入站邮件是连续入站序列最后一条,和后续2022-05-22的出站邮件匹配,间隔1天
  • 2022-06-22的入站邮件后续无出站记录,不返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:27:19