Mysql 如何通过检查两列值来获得每组的最高值
我有下面的测试表Mysql 如何通过检查两列值来获得每组的最高值,mysql,sql,group-by,subquery,inner-join,Mysql,Sql,Group By,Subquery,Inner Join,我有下面的测试表 USER_ID | YEAR | MONEY ---------------------- 1 | 0 | 0 1 | 12 | 12 1 | 48 | 12 2 | 15 | 15 2 | 10 | 20 3 | 0 | 0 因此,我试图返回一行有最高的钱。例如,行返回如下所示 USER_ID | YEAR | MONEY ----------------------
USER_ID | YEAR | MONEY
----------------------
1 | 0 | 0
1 | 12 | 12
1 | 48 | 12
2 | 15 | 15
2 | 10 | 20
3 | 0 | 0
因此,我试图返回一行有最高的钱。例如,行返回如下所示
USER_ID | YEAR | MONEY
----------------------
1 | 12 | 12
1 | 48 | 12
2 | 10 | 20
3 | 0 | 0
但是由于用户ID 1具有相同的货币价值,我想检查该货币金额的最高年份并返回结果。预期的结果应该是
USER_ID | YEAR | MONEY
----------------------
1 | 48 | 12
2 | 10 | 20
3 | 0 | 0
有可能这样吵架吗
这里是在线测试您的查询的链接
您可以尝试使用相关子查询
select userid, moneyval,max(year) as year
from
(
select * from t a
where moneyval in
(select max(moneyval) from t b where a.userid=b.userid)
)A group by userid, moneyval
输出:
userid moneyval year
1 12 48
2 20 10
3 0 0
您可以使用“不存在”来获取具有最大货币(和年份)值的行: 请参阅。
结果:
此查询将仅返回2行。查询将根据我的预期表结果跳过行id 2。你可以在这里查一下,谢谢!这是可行的,但基于我的实际表格。跳过某些行。我将根据这个记录另一个问题
select t.*
from test_table t
where not exists (
select 1 from test_table
where userid = t.userid and (
money > t.money or (money = t.money and year > t.year)
)
)
| userid | money | year |
| ------ | ----- | ---- |
| 1 | 12 | 48 |
| 2 | 20 | 10 |
| 3 | 0 | 0 |