我不确定标题是否措辞正确。基本上我有这样的数据:
A B C
1 10 0.6
1 11 0.6
1 12 1.0
1 13 1.0
2 5 0.6
2 4 0.6
我想选择一个C值最大的行。如果这导致重复的行,我将选择具有最低B值的那个
所以,我期待
A B C
1 12 1.0
2 4 0.6
对此有什么正确的SQL查询?
答案 0 :(得分:1)
这是使用子查询聚合的一种方法:
select t1.a, min(t1.b) b, t2.c
from yourtable t1
join (select a, max(c) c
from yourtable
group by a) t2 on t1.a = t2.a and t1.c = t2.c
group by t1.a, t2.c
答案 1 :(得分:0)
你可以这样做:
select t.*
from t
where (t.b, t.c) = (select t2.b, t2.c
from t t2
where t2.a = t.a
order by t2.c desc, t2.b asc
limit 1
);
Here是一个SQL小提琴。
这个版本有什么好处,它没有聚合,可以利用(a, c, b)
上的索引。
答案 2 :(得分:-1)
SELECT A, B, C
FROM [myTable]
ORDER BY C DESC, B ASC
LIMIT 1
答案 3 :(得分:-1)
在sqlite中,一个简单的单行代码将是:
select A, min(B), C from tableXXX group by C order by C desc;