我有两个表,如下所示,我试图在一个 sql 查询中获取参与者的时间(finish_time - start_time)。请注意,开始时间和结束时间需要从名为race_events 的关联表的发生_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),所以结果看起来像上面,但有一个名为 race_time 的附加列,其中包含该行的 (finished_at - started_at) 的结果。谁能建议我怎么做?
在相关说明中,我不相信使用子查询获取关联值的一般方法是最干净或最有效的,我非常感谢其他建议。
我正在使用 PostgreSQL,但我怀疑任何 SQL 数据库的答案都是一样的。
提前致谢。