0

高度なSQLクエリ(MSSQL 2000)についてサポートが必要です。

Result私は、 100メートルのレースタイムの陸上​​競技をリストするというテーブルを持っています。ランナーは複数のレースタイムを持つことができますが、各ランナーのベストタイムのみを表示したいと思います。

Result-tableには、、、、の3つの列が含まれていResult_idます。したがって、値をリストするときは一意である必要があり、最速(最低)の値である必要があります。athlete_idresult_timeathlete_idresult_time

何か案は?

4

3 に答える 3

1

SQL Server 2000では、Windows関数を使用できません。これは次のように実行できます。

select r.*
from result r join
     (select athlete_id, min(result_time) as mintime
      from result r
      group by athlete_id
     ) rsum
     on rsum.athlete_id = r.athlete_id and r.time = rsum.mintime

SQL Serverの最近のバージョンでは、row_number()を使用します。

于 2012-07-25T13:09:48.853 に答える
0

必要なのは、集計関数を使用することです。この場合min()、他の選択された列に同じデータを持つすべての行から最小値データが選択されます。これは、groupby句も使用する必要があることを意味します。以下のクエリは、あなたが望む結果を与えるはずです。

編集:他の列が必要な場合は、selectそれらを句に入れてから、次のように句に追加しgroup byます。

select althlete_id, result_id, min(result_time) as result_time from result-table group by althlete_id, result_id

select althlete_id, result_id, min(result_time) as result_time, race_date from result-table group by althlete_id, race_date, result_id

group by編集:集計関数の一部ではないすべての列をに追加する必要があります。集計関数は、、などのようなmin()ものmax()ですavg()

簡単な答え:列を角かっこで囲まない場合は、おそらくgroupbyに含める必要があります。

于 2012-07-25T13:08:01.610 に答える
0

それぞれに最速の時間が必要な場合は、次のathlete_idようにします。

select athelete_id, min(result_time) as FastestTime
from result
group by athelete_id

テーブルから追加の列を表示するには、次のresultようにテーブルに結合し直します。

select r.*
from result r
inner join (
    select athelete_id, min(result_time) as FastestTime
    from result
    group by athelete_id
) rm on r.athelete_id = rm.athelete_id and r.result_time = rm.FastestTime
于 2012-07-25T13:13:03.380 に答える