我在几个地方看到的这个查询问题被称为“经典SQL问题”。然而,我无法找到解决方案。问题是我无法找到避免结果重复的方法,因为Sam在两次加热时具有相同的速度。
起点是来自比赛的按时间顺序排列的“结果”表:
Id Name Club Engine Class Heat Speed
1 Joe NYRC Rotax Senior 1 320
2 Sam GMRK HQ Senior 1 280
3 Adam HCRC Rossi Senior 1 180
4 Rick NYRC Ford Junior 1 220
5 Joe NYRC Rotax Senior 2 330
6 Sam GMRK HQ Senior 2 280
7 Adam HCRC Rossi Senior 2 190
8 Joe NYRC Rotax Senior 3 300
9 Sam GMRK HQ Senior 3 210
10 Adam HCRC Rossi Senior 3 200
我想要的是在最佳结果之后订购的每个类的结果列表:
Pos Name Club Engine Class Heat Speed
1 Joe NYRC Rotax Senior 2 330
2 Sam GMRK HQ Senior 1 280
3 Adam HCRC Rossi Senior 3 200
我能得到什么:
Pos Name Club Engine Class Heat Speed
1 Joe NYRC Rotax Senior 2 330
2 Sam GMRK HQ Senior 2 280
3 Sam GMRK HQ Senior 1 280
4 Adam HCRC Rossi Senior 3 200
使用以下查询:
select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, yt.Speed
from Result yt
where Speed = (select max(Speed) from Result st where yt.Name=st.Name)
AND Class = 'Senior'
Order by Speed DESC
在某处应用distinct似乎是一个好主意,但我无法成功!
感谢您的支持
答案 0 :(得分:0)
获得Max(速度)并按其他字段分组:
select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, max(yt.Speed) as MaxSpeed
from Result yt
where Class = 'Senior'
group by Name, Club, Engine, Class, Heat
Order by MaxSpeed DESC