我需要有关高级 SQL 查询 (MSSQL 2000) 的帮助。
我有一张表Result
,上面列出了田径 100 米的比赛时间。一个跑步者可以有多个比赛时间,但我只想展示每个跑步者的最佳时间。
结果表包含三列,Result_id
, athlete_id
, result_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()。
您想要的是使用聚合函数。在这种情况下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 中。
如果您只需要每个 最快的时间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