如何从多表关联生成的表中提取每个用户最高Attempts的行
提取每个用户最高Attempts值的完整行数据
我有一张通过多表关联生成的数据表,结构包含UserId.、Attempts.、quizno字段,每个用户对应多条不同Attempts.值的记录,需要筛选出每个用户对应最高Attempts.值的完整行。
原始数据表
| UserId. | Attempts. | quizno |
|---|---|---|
| First | 1 | assd. |
| First | 2 | ffjfjf. |
| Second | 1 | cbcbc. |
| Second | 2 | tititi. |
| Second | 3 | cncncn. |
期望结果表
| UserId. | Attempts. | quizno |
|---|---|---|
| First | 2 | ffjfjf |
| Second | 3 | cncncn |
方法1:使用窗口函数(推荐,兼容多数现代数据库)
利用ROW_NUMBER()窗口函数对每个用户的记录按Attempts.降序排序,取排序为1的行即可得到每个用户的最高Attempts记录:
SELECT UserId., Attempts., quizno FROM ( SELECT UserId., Attempts., quizno, ROW_NUMBER() OVER (PARTITION BY UserId. ORDER BY Attempts. DESC) AS rn FROM your_table_name ) t WHERE rn = 1;
如果同一个用户存在多条相同最高Attempts.的记录,且需要保留所有这类记录,可将ROW_NUMBER()替换为RANK()。
方法2:子查询关联(兼容旧版数据库)
先通过子查询找出每个用户的最高Attempts.值,再与原表关联获取完整行数据:
SELECT t1.UserId., t1.Attempts., t1.quizno FROM your_table_name t1 INNER JOIN ( SELECT UserId., MAX(Attempts.) AS max_attempts FROM your_table_name GROUP BY UserId. ) t2 ON t1.UserId. = t2.UserId. AND t1.Attempts. = t2.max_attempts;
注意:若同一个用户有多条相同最高Attempts.的记录,此方法会返回所有符合条件的行。
内容的提问来源于stack exchange,提问作者africandrogba
相关产品推荐
相关产品推荐

