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


Get values from database where column is unique

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

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

Result表包含三列,即Result_idathlete_idresult_time。所以当我列出值时,athlete_id必须是唯一的,而result_time必须是最快(最低)的值。

有什么想法吗?

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

如果您只是需要每个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

您想要的是使用聚合函数。在这种情况下CCD_ 9,其将从在其它所选列中具有相同数据的所有行中选择最小数据。这意味着你还必须向我们提供分组条款。下面的查询应该会给出您想要的结果。

编辑:如果您需要其他列,只需将它们放入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()

简短的回答:如果你不把一列放在括号里,它可能必须在分组中。