我下面有这个表test_table
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
是否有可能获得这样的行?
此处是在线测试您的查询的链接 http://sqlfiddle.com/#!9/2e5660/1
答案 0 :(得分:1)
您可以尝试使用相关子查询
<p style="text-align: right;"><a href="#" target="_blank">Daha fazlasını öğrenin</a></p>
body {
font-family: "Proxima Nova",Arial,sans-serif;
text-rendering: optimizeLegibility;
}
输出:
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
答案 1 :(得分:0)
您可以使用不存在来获取货币(和年份)最大值的行:
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)
)
)
请参见typing。
结果:
| userid | money | year |
| ------ | ----- | ---- |
| 1 | 12 | 48 |
| 2 | 20 | 10 |
| 3 | 0 | 0 |