comeon2518 2024-09-05 21:28 采纳率: 0%
浏览 22

求ORACLE的一个SQL,获取某字段最大值的所有行

Oracle数据库有如下表:
Name Num Value
A 1 a11
A 1 a12
A 2 a21
A 2 a22
A 3 a31
A 3 a32
A 3 a33
B 1 b11
B 1 b12
B 2 b21
B 2 b22
B 3 b31
B 3 b32
B 3 b33
B 4 b41
B 4 b42
C 1 c11
C 1 c12
C 2 c21
C 2 c22

现在需要用一个SQL语句得到如下结果(查询出A和B的Num最大值的所有行):
Name Num Value
A 3 a31
A 3 a32
A 3 a33
B 4 b41
B 4 b42

  • 写回答

2条回答 默认 最新

  • Roc-xb 领域专家: 后端开发技术领域 2024-09-06 00:06
    关注

    参考:你可以使用 Oracle 的子查询和窗口函数来实现这个需求。以下是一个示例 SQL 语句:

    SELECT Name, Num, Value
    FROM (
        SELECT Name, Num, Value,
               MAX(Num) OVER (PARTITION BY Name) AS MaxNum
        FROM your_table
    )
    WHERE Num = MaxNum
    AND Name IN ('A', 'B');
    

    说明:

    • MAX(Num) OVER (PARTITION BY Name):这是一个窗口函数,用于计算每个 Name 分组中的最大 Num 值。
    • 子查询会为每一行添加一个 MaxNum 列,表示该 Name 分组的最大 Num 值。
    • 外层查询通过 WHERE Num = MaxNum 筛选出具有最大 Num 值的行。
    • AND Name IN ('A', 'B'):确保只查询 AB 的数据。

    your_table 替换为你的实际表名即可。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月5日