[英]Select distinct values from a column based on highest value in another column
[英]Getting distinct values with the highest value in a specific column
如何从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 |
+----+-----------+---+
到目前为止我所拥有的是(适用于一个用户)
SELECT USER, VERSION
FROM TABLE
WHERE USER = 'Brad'
AND VERSION = (SELECT MAX(VERSION ) FROM TABLE WHERE USER= 'Brad')
SELECT USER, max(VERSION) VERSION
FROM TABLE GROUP BY USER;
如果你需要一个ID
SELECT ID, USER, VERSION FROM (
SELECT ID, USER, VERSION,
RANK() OVER(PARTITION BY USER ORDER BY VERSION DESC) RNK
FROM TABLE
) WHERE RNK = 1;
如果你有
| 2 | Brad | 5 |
+----+-----------+---+
| 3 | Brad | 3 |
+----+-----------+---+
| 4 | Brad | 5 |
使用RANK的查询为您提供了两个用户
| 2 | Brad | 5 |
+----+-----------+---+
| 4 | Brad | 5 |
如果只需要一行,那么用ROW_NUMBER()
替换RANK()
ROW_NUMBER()
在您的查询中,您正在使用AND VERSION = (SELECT MAX(VERSION ) FROM TABLE WHERE USER= 'Brad')
,它相当于RANK()(所有行的最大值为VERSION)
first_value
分析函数应该可以解决问题:
SELECT DISTINCT FIRST_VALUE (id)
OVER (PARTITION BY name ORDER BY version DESC)
name,
FIRST_VALUE (version)
OVER (PARTITION BY name ORDER BY version DESC)
FROM my_table
另一种方法是使用row_number
函数:
SELECT id, name, version
FROM (SELECT id, name, version
ROW_NUMBER() OVER (PARTITION BY name ORDER BY version DESC) rn
FROM my_table)
WHERE rn = 1
个人而言,不确定我更喜欢哪个。 他们每个人都有自己的优点和丑陋。
这可能对你有所帮助:
select id, user, version
from
(
select id, user, version, row_number() over (partition by user order by version desc) rownum
from yourtable
) as t
where t.rownum = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.