2011-05-21 38 views
2

我有我的一些SQL的後數據庫表(這是打敗了我這麼遠!)檢索頂部從數據庫48唯一的記錄

試想有192個體育俱樂部誰所有參加每賽季12場比賽。

所以這是2304個個人表演每賽季(例如在100Metres)

我想找到頂級的48(唯一的)個人從表中的表演,這48名運動員,然後去參加本賽季世錦賽結束。所以想象2次最快的時間都是由「約翰史密斯」設定的,但他只能在世界冠軍中進入一次。所以我會尋找下一個沒有被「約翰史密斯」設置的最快時間...等等,直到我有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 

前4個獨特的個人表演

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

如果您想要特定的SQL查詢,我們需要知道您使用的數據庫服務器。 – Tony 2011-05-21 23:19:25

回答

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 
+0

謝謝肯。我會嘗試並適應該代碼的工作。 – user585085 2011-05-21 23:23:09

+0

太棒了!謝謝你的回覆。 – user585085 2011-05-21 23:37:20

+0

很好地完成了Ken。簡單而有效。 – IAmTimCorey 2011-05-21 23:38:09

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 
相關問題