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

SQL多表关联按时间戳获取指定列唯一值最新行问题

问题排查与解决方案

你的代码有两个关键问题导致无法得到预期结果:

  1. TOP 1是全局范围限制
    原代码里的TOP 1会从所有符合条件的结果中只取排序后的第一行——也就是全局最新的那一条,而非每个Flow.Code分组下的最新行。

  2. IN子句的字符串值未加单引号
    你写的IN (BLV-PF-2, CA-ARK-CH-PF, CA COS-AU-EN-AU-PF)里的Code是字符串,必须用单引号包裹,否则数据库会把它们识别为列名,直接运行会报语法错误。


修正后的代码(分组取最新)

用ROW_NUMBER()窗口函数按Flow.Code分组,每组内按ModifiedAt倒序排名,再筛选出每组的第一行即可:

WITH RankedOperations AS (
    SELECT 
        f.id AS FlowId,
        f.code AS FlowCode,
        o.id AS OperationId,
        o.Flowid,
        o.Status,
        o.createdat,
        o.modifiedat,
        o.errormessage,
        -- 按FlowCode分组,组内按修改时间倒序排名
        ROW_NUMBER() OVER (PARTITION BY f.code ORDER BY o.ModifiedAt DESC) AS rn
    FROM dbo.Flow f
    JOIN dbo.Operation o ON f.Id = o.FlowId
    WHERE f.Code IN ('BLV-PF-2', 'CA-ARK-CH-PF', 'CA COS-AU-EN-AU-PF')
)
SELECT 
    FlowId,
    FlowCode,
    OperationId,
    Flowid,
    Status,
    createdat,
    modifiedat,
    errormessage
FROM RankedOperations
WHERE rn = 1;

代码说明

  • PARTITION BY f.code:把结果按Flow.Code拆分成独立的分组
  • ORDER BY o.ModifiedAt DESC:每个分组内按操作的修改时间从新到旧排序
  • rn = 1:只保留每个分组里排名第一的行,也就是该Code对应的最新操作数据

内容的提问来源于stack exchange,提问作者MADDURI NAGA SRAVYA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:02:15