从列中唯一的数据库中获取值

时间:2012-07-25 13:06:48

标签: php sql database

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

我有一张名为Result的桌子,列出了田径100米的比赛时间。跑步者可以有几个比赛时间,但我想只显示每个跑步者的最佳时间。

结果表包含三列,Result_idathlete_idresult_time。因此,athlete_id在列出值时必须是唯一的,result_time必须是最快(最低)的值。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

在SQL Server 2000中,您无法使用Windows功能。您可以按如下方式执行此操作:

select r.*
from result r join
     (select athlete_id, min(result_time) as mintime
      from result r
      group by athlete_id
     ) rsum
     on rsum.athlete_id = r.athlete_id and r.time = rsum.mintime

在更新版本的SQL Server中,您将使用row_number()。

答案 1 :(得分:0)

您想要的是使用聚合函数。在这种情况下min()将从其他所选列中具有相同数据的所有行中选择minumin数据。这意味着您还必须使用group by子句。下面的查询可以为您提供所需的结果。

编辑:如果您需要其他列,只需将它们放入select子句中,然后将它们添加到group by子句中,如下所示:

select althlete_id, result_id, min(result_time) as result_time from result-table group by althlete_id, result_id

select althlete_id, result_id, min(result_time) as result_time, race_date from result-table group by althlete_id, race_date, result_id

编辑:您需要将所有列添加到group by中,而不是聚合函数的一部分。聚合函数包括min()max()avg()等。

简短回答:如果您没有在括号中添加列,则可能必须在组中。

答案 2 :(得分:0)

如果您只需要每个athlete_id的最快时间,请执行以下操作:

select athelete_id, min(result_time) as FastestTime
from result
group by athelete_id

要显示result表中的其他列,您可以像这样加入:

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