我需要高级SQL查询(MSSQL 2000)的帮助。
我有一张名为"成绩"的表,上面列出了田径100米和200米的比赛时间。一个跑步者可以有几个比赛时间,但我只想在每个项目上展示每个跑步者的最佳时间。
Result表包含五列,Result_id、athlete_id、Result_time、Result_date和event_code。因此,当我列出值时,athlete_id必须是唯一的,result_time必须是最快(最低)的值。此外,我希望能够选择event_code是"=1"还是"=2",因为100米和200米的结果时间混合在同一个表中。
几天前我问了一个类似的问题,但没有事件代码条件。
这就是我们得出的答案。
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条件添加到这个片段中吗?
试试这个:
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
在子查询的输出中包含事件代码。然后,您可以同时显示所有事件,或者在外部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
最后一行是可选的WHERE子句,以防一次只需要一个事件。