0

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

我有一张表Result,上面列出了田径 100 米的比赛时间。一个跑步者可以有多个比赛时间,但我只想展示每个跑步者的最佳时间。

结果表包含三列,Result_id, athlete_id, result_time。所以athlete_id当我列出值时必须是唯一的,并且result_time必须是最快(最低)的值。

有任何想法吗?

4

3 回答 3

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()。

于 2012-07-25T13:09:48.853 回答
0

您想要的是使用聚合函数。在这种情况下min(),它将从其他选定列中具有相同数据的所有行中选择最小数据。这意味着您还必须使用 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()

简短回答:如果您没有将列放在括号中,则它可能必须在 group by 中。

于 2012-07-25T13:08:01.610 回答
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
于 2012-07-25T13:13:03.380 回答