0

高度な SQL クエリ (MSSQL 2000) について助けが必要です。

陸上競技の 100 メートルと 200 メートルのレース時間を一覧表示する Result というテーブルがあります。ランナーは複数のレースタイムを持つことができますが、各イベントでの各ランナーのベスト タイムのみを表示したいと考えています。

結果テーブルには、Result_id、attribute_id、result_time、result_date、event_code の 5 つの列が含まれています。したがって、値をリストするときは、athlete_id が一意である必要があり、result_time が最速 (最低) の値である必要があります。また、100 メートルと 200 メートルの結果時間が同じテーブルに混在しているため、event_code を "= 1" にするか "= 2" にするかを選択できるようにしたいと考えています。

数日前に同様の質問をしましたが、event_code 条件はありませんでした。

これが私たちの出した答えです。

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

このスニペットに event_code 条件を追加する方法はありますか?

4

2 に答える 2

0

サブクエリの出力にイベントコードを含めます。次に、すべてのイベントを同時に表示するか、外側のwhere句でそれらを選択できます。

select r.*
from result r inner join
     (select athlete_id, event_code, min(result_time) as FastestTime
      from result
      group by athlete_id, event_code
     ) rm
     on r.athelete_id = rm.athlete_id and
        r.result_time = rm.FastestTime and
        r.event_code = rm.event_code
-- where event_code = xx

最後の行は、一度に1つのイベントだけが必要な場合のオプションのWHERE句です。

于 2012-07-29T13:41:54.850 に答える
0

これを試して:

select r.*
from result r
inner join (
    select athelete_id, min(result_time) as FastestTime
    from result
    where event_code = 1
    group by athelete_id
) rm on r.athelete_id = rm.athelete_id and r.result_time = rm.FastestTime
于 2012-07-29T13:04:02.370 に答える