我有一些数据库表,我正在使用SQL(到目前为止,这让我失败了!)
想象一下,每个赛季有192个运动俱乐部参加12场赛道会议。
这是每季2304次个人表演(例如在100Metres中)
我想从表中找到前48名(独特)个人表演,这48名运动员随后将参加本赛季世界锦标赛的结束。
所以想象两个最快的时间都是由“约翰史密斯”设定的,但他只能在世界冠军中输入一次。所以我会寻找未被“约翰史密斯”设定的下一个最快的时间...等等,直到我有48名独特的运动员......
希望有道理。
如果有人可以提供帮助,请提前致谢
PS 我确实有一个很好的屏幕截图创建,可以更好地解释它。但作为新用户,我无法发布图片。
我会尝试复制并粘贴版本......
ID AthleteName AthleteID Time
1 Josh Lewis 3 11.99
2 Joe Dundee 4 11.31
3 Mark Danes 5 13.44
4 Josh Lewis 3 13.12
5 John Smith 1 11.12
6 John Smith 1 12.18
7 John Smith 1 11.22
8 Adam Bennett 6 11.33
9 Ronny Bower 7 12.88
10 John Smith 1 13.49
11 Adam Bennett 6 12.55
12 Mark Danes 5 12.12
13 Carl Tompkins 2 13.11
14 Joe Dundee 4 11.28
15 Ronny Bower 7 12.14
16 Carl Tompkin 2 11.88
17 Nigel Downs 8 14.14
18 Nigel Downs 8 12.19
四大独特个人表演
1 John Smith 1 11.12
3 Joe Dundee 4 11.28
5 Adam Bennett 6 11.33
6 Carl Tompkins 2 11.88
答案 0 :(得分:2)
基本上是这样的:
select top 48 *
from (
select athleteId,min(time) as bestTime
from theRaces
where raceId = '123' -- e.g., 123=100 meters
group by athleteId
) x
order by bestTime
答案 1 :(得分:0)
试试这个 -
select x.ID, x.AthleteName , x.AthleteID , x.Time
(
select rownum tr_count,v.AthleteID AthleteID, v.AthleteName AthleteName, v.Time Time,v.id id
from
(
select
tr1.AthleteName AthleteName, tr1.Time time,min(tr1.id) id, tr1.AthleteID AthleteID
from theRaces tr1
where time =
(select min(time) from theRaces tr2 where tr2.athleteId = tr1.athleteId)
group by tr1.AthleteName, tr1.AthleteID, tr1.Time
having tr1.Time = ( select min(tr2.time) from theRaces tr2 where tr1.AthleteID =tr2.AthleteID)
order by tr1.time
) v
) x
where x.tr_count < 48