从列中唯一的数据库中获取值并添加条件

时间:2012-07-29 11:29:47

标签: php sql sql-server-2000

我需要有关高级SQL查询(MSSQL 2000)的帮助。

我有一张名为Result的表,其中列出了田径100和200米的比赛时间。跑步者可以有几个比赛时间,但我想在每个比赛中仅显示每个跑步者的最佳时间。

Result-table包含五列,Result_id,athlete_id,result_time,result_date,event_code。因此,当我列出值时,athlete_id必须是唯一的,result_time必须是最快(最低)的值。此外,我希望能够选择event_code是“= 1”还是“= 2”,因为100和200米的结果时间混合在同一个表中。

我几天前问了一个类似的问题,但是没有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条件添加到此代码段的?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

最后一行是一个可选的WHERE子句,以防您一次只想要一个事件。