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

如何从History表筛选完成后变更状态的表单及首次变更信息

解决筛选完成后首次变更状态的表单数据问题

需求回顾

从History表(字段:FormId、Status、Date)中筛选出:

  • 曾处于Completed状态
  • 完成后有状态变更的表单
    返回字段:FormId、完成日期(CompleteDate)、完成后的首次变更状态、首次变更日期(FirstUpdateDate)

示例数据

FormIdStatusDate
100000New10-1-2024 15:00
100000In Progress10-1-2024 18:00
100000Completed10-1-2024 22:00
100001New10-1-2024 22:00
100000In Progress10-2-2024 04:00
100000Revaluate10-3-2024 06:00
100002New10-3-2024 08:00
100002In Progress10-3-2024 10:00
100002Completed10-3-2024 12:00
100003New10-4-2024 12:00
100003In Progress10-5-2024 10:00
100003Completed10-5-2024 12:00
100003Revaluate10-6-2024 09:00

期望结果

FormIdCompleteDateStatusFirstUpdateDate
10000010-1-2024 22:00In Progress10-2-2024 04:00
10000310-5-2024 12:00Revaluate10-6-2024 09:00

问题分析

你之前的SQL错误在于用max(ChangeDate) over (partition by h.formId)获取了表单的最后更新日期,而非完成日期之后的首次变更日期。需要调整逻辑,聚焦在完成时间点之后的第一条状态记录。

解决方案SQL

WITH FormComplete AS (
    -- 获取每个表单的首次完成日期
    SELECT 
        FormId,
        MIN(Date) AS CompleteDate
    FROM History
    WHERE Status = 'Completed'
    GROUP BY FormId
),
PostCompleteChanges AS (
    -- 标记每个表单完成后的首次变更记录
    SELECT 
        h.FormId,
        h.Status,
        h.Date AS FirstUpdateDate,
        ROW_NUMBER() OVER (PARTITION BY h.FormId ORDER BY h.Date ASC) AS rn
    FROM History h
    JOIN FormComplete fc ON h.FormId = fc.FormId
    WHERE h.Date > fc.CompleteDate -- 仅保留完成后的状态记录
)
-- 筛选出首次变更记录并关联完成日期
SELECT 
    pc.FormId,
    fc.CompleteDate,
    pc.Status,
    pc.FirstUpdateDate
FROM PostCompleteChanges pc
JOIN FormComplete fc ON pc.FormId = fc.FormId
WHERE pc.rn = 1 -- 只取完成后的第一条变更记录
ORDER BY pc.FormId;

逻辑解释

  1. FormComplete CTE:按FormId分组,统计每个表单第一次进入Completed状态的日期,确保拿到的是最早的完成时间。
  2. PostCompleteChanges CTE:关联完成日期,筛选出所有完成后的状态记录,用ROW_NUMBER()按日期升序给每个表单的完成后记录编号,编号为1的就是首次变更记录。
  3. 最后筛选出编号为1的记录,关联完成日期,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:15