获取特定列中具有最高值的不同值

Ned*_*Ned 3 sql oracle select distinct

如何在 SQL 中从下表中获取突出显示的行?(突出显示基于具有最高版本的用户名的不同行)

在此处输入图片说明

如果您需要纯文本表:

+----+-----------+---+
| 1  | John      | 1 |
+----+-----------+---+
| 2  | Brad      | 1 |
+----+-----------+---+
| 3  | Brad      | 3 |
+----+-----------+---+
| 4  | Brad      | 2 |
+----+-----------+---+
| 5  | Jenny     | 1 |
+----+-----------+---+
| 6  | Jenny     | 2 |
+----+-----------+---+
| 7  | Nick      | 4 |
+----+-----------+---+
| 8  | Nick      | 1 |
+----+-----------+---+
| 9  | Nick      | 3 |
+----+-----------+---+
| 10 | Nick      | 2 |
+----+-----------+---+
| 11 | Chris     | 1 |
+----+-----------+---+
| 12 | Nicole    | 2 |
+----+-----------+---+
| 13 | Nicole    | 1 |
+----+-----------+---+
| 14 | James     | 1 |
+----+-----------+---+
| 15 | Christine | 1 |
+----+-----------+---+
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的是(适用于一位用户)

SELECT USER, VERSION 
FROM TABLE 
WHERE USER = 'Brad' 
AND VERSION  = (SELECT MAX(VERSION ) FROM TABLE WHERE USER= 'Brad')
Run Code Online (Sandbox Code Playgroud)

Mul*_*ync 5

SELECT USER, max(VERSION) VERSION
FROM TABLE GROUP BY USER;
Run Code Online (Sandbox Code Playgroud)

如果您需要身份证,那么

SELECT ID, USER, VERSION FROM (
    SELECT ID, USER, VERSION, 
           RANK() OVER(PARTITION BY USER ORDER BY VERSION DESC) RNK 
    FROM TABLE
) WHERE RNK = 1;
Run Code Online (Sandbox Code Playgroud)

如果你有

| 2  | Brad      | 5 |
+----+-----------+---+
| 3  | Brad      | 3 |
+----+-----------+---+
| 4  | Brad      | 5 |
Run Code Online (Sandbox Code Playgroud)

带有 RANK 的查询为您提供两个用户

| 2  | Brad      | 5 |
+----+-----------+---+
| 4  | Brad      | 5 |
Run Code Online (Sandbox Code Playgroud)

如果您只需要一行,则替换RANK()ROW_NUMBER()

在您的查询中,您使用AND VERSION = (SELECT MAX(VERSION ) FROM TABLE WHERE USER= 'Brad')的等效于 RANK() (具有最大 VERSION 的所有行)