以下に示すように、2 つのテーブルがあり、1 つの SQL クエリで参加者の時間 (finish_time - start_time) を取得しようとしています。開始時刻と終了時刻は、race_events という関連テーブルの occured_at 列から取得する必要があることに注意してください。
PARTICIPANTS
id | membership_id | race_id
------+---------------+---------
1133 | 547 | 690
1121 | 342 | 690
RACE_EVENTS
id | participant_id | event_type | occurred_at
------+----------------+------------+---------------
1075 | 1121 | start | 1366249860579
1077 | 1121 | finish | 1366249968936
1104 | 1133 | start | 1366250760128
1107 | 1133 | finish | 1366250876237
結合を使用してこれを達成する方法がわからなかったので、次のようにサブクエリを使用して問題に取り組みました。
SELECT
(select occurred_at from race_events where participant_id = participants.id and event_type = 'start') as started_at,
(select occurred_at from race_events where participant_id = participants.id and event_type = 'finish') as finished_at,
participants.* FROM "participants"
これにより、各参加者の開始時刻と終了時刻を含む結果が得られました。
started_at | finished_at | id | membership_id | race_id
---------------+---------------+------+---------------+---------
1366250760128 | 1366250876237 | 1133 | 547 | 690
1366249860579 | 1366249968936 | 1121 | 342 | 690
理想的には、このクエリでも race_time (finished_at - started_at) も計算したいので、結果は上記のようになりますが、その行の (finished_at - started_at) の結果を含む race_time という追加の列があります。誰かが私がそれを行う方法を提案できますか?
これに関連して、サブクエリを使用して関連する値を取得する一般的なアプローチが最もクリーンで効率的であるとは確信していません。他の提案をいただければ幸いです。
私は PostgreSQL を使用していますが、答えはどの SQL データベースでも同じだと思います。
前もって感謝します。