データベース テーブル ('result') から結果のリストを取得しようとしていますが、各メンバーが複数の結果を送信している可能性があり、ベスト タイムを取得したいと考えています。
以下のクエリは機能します (ただし、効率的かどうかはわかりません)。ただし、同じ競技者から同じタイムで複数の結果が得られる場合を除きます。(例: 競技者 #2 はタイム 32.15 秒を 2 回記録します)。この状況では、私が望むものではなく、この競合他社に対して 2 つの行を取得します。
SELECT result_id FROM (
SELECT member_id,MIN(time) AS mintime FROM result
JOIN member_result ON result.id = member_result.result_id
WHERE event_id = ?
GROUP BY member_id ORDER BY mintime ) AS x
JOIN result ON result.time = x.mintime
JOIN member_result ON member_result.result_id = result.id
AND member_result.member_id = x.member_id
問題を解決するための提案は大歓迎です。
編集: 要求されたテーブルの構造;
member_result (TABLE)
id int unsigned (10)
result_id int unsigned (10)
member_id int unsigned (10)
club_id int unsigned (10)
result (TABLE)
id int unsigned (10)
time decimal (6)
is50mPool BIT ()
date date ()
verified BIT ()
verified_date timestamp ()
verified_comment varchar (255)
hasEmailed BIT ()
enabled BIT ()
event_id int unsigned (10
問題例: 結果: イベント#2 の id#1、時刻 60 member_result: id#1、結果 ID 1、メンバー ID 3 結果: イベント#2 の ID#2、時刻 60 member_result: id#2、結果 ID 2、メンバー ID 3
いずれかの result_id を使用して 1 つの行を返したいと思います。現在、最小時間が等しいため、両方の行が返されます。