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)
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 的所有行)
| 归档时间: |
|
| 查看次数: |
4279 次 |
| 最近记录: |