在MS Access中实现各赛段最短用时数据查询(无ROW_NUMBER()函数)
在MS Access中获取各赛段最短时长选手数据的可行方案
由于MS Access不支持ROW_NUMBER()这类窗口函数,你之前的SQL无法执行,这里提供两种可行的替代实现方式:
方法一:分组获取最短时长后关联查询
这种方式先通过分组得到每个赛段的最短完成时长,再关联原表筛选出对应选手数据:
SELECT i.Num_dossard, i.Num_etape, i.Resultat FROM import_donnees AS i INNER JOIN ( -- 按赛段分组,计算每个赛段的最短时长 SELECT Num_etape, MIN(Resultat) AS Min_Resultat FROM import_donnees GROUP BY Num_etape ) AS m ON i.Num_etape = m.Num_etape AND i.Resultat = m.Min_Resultat -- 按赛段和选手ID排序,可根据需求调整 ORDER BY i.Num_etape, i.Num_dossard;
说明:如果同一赛段有多名选手完成时长相同且均为最短,该查询会返回所有符合条件的选手数据。
方法二:子查询计数模拟窗口函数逻辑
通过子查询统计同赛段内时长更短的选手数量,筛选出数量为0的记录(即当前选手时长最短):
SELECT i.Num_dossard, i.Num_etape, i.Resultat FROM import_donnees AS i WHERE ( SELECT COUNT(*) FROM import_donnees AS j -- 限定同赛段,且时长比当前记录更短 WHERE j.Num_etape = i.Num_etape AND j.Resultat < i.Resultat ) = 0 ORDER BY i.Num_etape, i.Num_dossard;
说明:同样支持返回同赛段内所有最短时长的选手,逻辑上等价于窗口函数中RANK()的效果。
内容的提问来源于stack exchange,提问作者Axel Elias
相关产品推荐
相关产品推荐

