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

如何编写SQL查询获取最新状态为Approved的表单记录

解决方法:筛选最新状态为Approved的表单记录

我来帮你搞定这个需求!要找出最新状态(ChangedDate最大)为Approved的表单,关键是先定位每个表单的最新状态记录,再验证状态是否符合要求。下面提供两种实用的SQL写法,适用于你的SQL Server环境:

方法一:使用窗口函数ROW_NUMBER()(推荐,SQL Server 2008+)

窗口函数能清晰地为每个表单的状态记录排序,直接取最新的那条:

SELECT f.FormId, f.Property1, f.Property2, fs.Status, fs.ChangedDate
FROM Forms f
INNER JOIN (
    SELECT 
        FormId, 
        Status, 
        ChangedDate,
        -- 按FormId分组,ChangedDate倒序,每条记录分配序号
        ROW_NUMBER() OVER (PARTITION BY FormId ORDER BY ChangedDate DESC) AS rn
    FROM FormStatuses
) fs ON f.FormId = fs.FormId
-- 只取每个表单的最新记录,且状态为Approved
WHERE fs.rn = 1 AND fs.Status = 'APPROVED';

方法二:使用关联子查询(兼容老版本SQL Server)

通过子查询找到每个表单的最新ChangedDate,再关联匹配状态:

SELECT f.FormId, f.Property1, f.Property2, fs.Status, fs.ChangedDate
FROM Forms f
INNER JOIN FormStatuses fs ON f.FormId = fs.FormId
WHERE 
    -- 匹配当前表单的最新ChangedDate
    fs.ChangedDate = (
        SELECT MAX(ChangedDate) 
        FROM FormStatuses 
        WHERE FormId = fs.FormId
    )
    -- 筛选状态为Approved的记录
    AND fs.Status = 'APPROVED';

结果验证

针对你提供的示例数据:

  • FormId=5277的最新状态是REJECTED,不会被返回
  • FormId=5276的最新状态是APPROVED,会被正确返回
  • FormId=5275的最新状态是PENDING,不会被返回

完全符合你的预期需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:52:25