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

求助:在SQL Server中提取各Marker最新版本数据的SQL查询方案

保留每个Marker最新版本记录的SQL查询(SQL Server)

针对你的需求,这里提供两种适用于Microsoft SQL Server的解决方案,均可实现仅保留每个Marker对应最新版本的所有数据:

方法1:使用窗口函数(推荐)

窗口函数可直接在分组内对版本排序,轻松筛选出最新版本的所有记录,尤其适合同一Marker存在多条相同最新版本的场景:

SELECT Marker, Version, Value
FROM (
    SELECT 
        Marker, 
        Version, 
        Value,
        -- 按Marker分组,每组内按Version降序排名
        RANK() OVER (PARTITION BY Marker ORDER BY Version DESC) AS version_rank
    FROM YourTableName
) ranked_data
WHERE version_rank = 1;

说明

  • RANK()函数会给同一Marker下的最新版本记录都标记为1(比如示例中Marker3的3条001版本记录),不会遗漏任何同版本数据。
  • 如果你的Version字段是数值类型而非字符串,直接排序即可;如果是字符串但格式不规则,可转换为数值后排序,比如ORDER BY CAST(Version AS INT) DESC。

方法2:子查询关联

先通过子查询找出每个Marker的最大版本,再关联原表筛选对应记录:

SELECT t.Marker, t.Version, t.Value
FROM YourTableName t
INNER JOIN (
    -- 找出每个Marker的最新版本
    SELECT Marker, MAX(Version) AS LatestVersion
    FROM YourTableName
    GROUP BY Marker
) latest_versions 
    ON t.Marker = latest_versions.Marker 
    AND t.Version = latest_versions.LatestVersion;

说明

  • 这种方法逻辑直观,适合简单场景。如果Version是字符串且需要按数值排序,子查询中的MAX(Version)要改为MAX(CAST(Version AS INT)),同时关联条件也要对应转换。

注意事项

  • 请将代码中的YourTableName替换为你实际使用的数据表名称。
  • 确保Version字段的排序逻辑符合你的业务需求,比如固定长度的数字字符串(如001、002)按字典序排序即可,非固定长度则需转换为数值类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:42