我需要有关高级 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