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

如何用Oracle SQL显示各政策所有版本及对应最新版本号?

解决方案

你的原SQL达不到预期效果,是因为GROUP BY Policy_Name, Version_Number会把每个政策的单个版本号作为分组依据,导致MAX(Version_Number)只能返回当前分组内的版本号(也就是每行自己的版本),无法获取对应政策的全局最高版本。

下面提供两种可行的解决方法:

方法1:子查询关联

先通过子查询计算每个政策的最高版本,再将结果与原表关联,匹配对应政策的所有行:

SELECT 
    p.Policy_Name, 
    p.Version_Number, 
    max_versions.Current_Version
FROM 
    POLICIES p
INNER JOIN (
    -- 子查询:获取每个政策的最高版本
    SELECT 
        Policy_Name, 
        MAX(Version_Number) AS Current_Version
    FROM 
        POLICIES
    GROUP BY 
        Policy_Name
) max_versions 
ON p.Policy_Name = max_versions.Policy_Name;

方法2:窗口函数(推荐)

使用MAX() OVER (PARTITION BY Policy_Name)窗口函数,直接在原表的每行数据中计算对应政策的最高版本,写法更简洁高效(适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库):

SELECT 
    Policy_Name, 
    Version_Number,
    MAX(Version_Number) OVER (PARTITION BY Policy_Name) AS Current_Version
FROM 
    POLICIES;

两种方法都能输出你期望的结果,窗口函数的方式无需额外关联操作,性能更优。

内容的提问来源于stack exchange,提问作者Erik in Wpg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:20