有这个表:
tomcat::setenv::entry
我如何选择所有行但删除重复的行,让运动员参加同一赛事(菲尔兹运动员和赛事),并选择最低(或该运动员的最高分),我也想将每个赛事限制为前10名运动员(未在结果中显示)
预期输出(选择最高标记),(第5行被删除)
setenv.sh
感谢您的帮助,执行我想要的查询(减去前十名)是:
SELECT [tblPerformanceData-FieldBoys] .Eventnum,[tblPerformanceData- FieldBoys] .Mark,[tblPerformanceData-FieldBoys] .Meet,[tblPerformanceData-FieldBoys] .CY,[tblPerformanceData-FieldBoys] .AleleteID,[tblPerformanceData-FieldBoys]。 MeetID
FROM [tblPerformanceData-FieldBoys] INNER JOIN MaxAthleteByEventBoysField ON([tblPerformanceData-FieldBoys] .AthleteID = MaxAthleteByEventBoysField.AthleteID)AND([tblPerformanceData-FieldBoys] .Mark = MaxAthleteByEventBoysField.MaxOfMark)AND([tblPerformanceData-FieldBoys] .Eventnum = MaxAthleteByEventBoysField.Eventnum)
GROUP BY [tblPerformanceData-FieldBoys] .Eventnum,[tblPerformanceData-FieldBoys] .Mark,[tblPerformanceData-FieldBoys] .Meet,[tblPerformanceData-FieldBoys] .CY,[tblPerformanceData-FieldBoys] .AthleteID,[tblPerformanceData-FieldBoys] .MeetID
ORDER BY [tblPerformanceData-FieldBoys] .Mark DESC;
答案 0 :(得分:0)
您可以使用级联查询来执行此操作。尝试在主表上运行分组查询,该查询仅包括运动员,事件和标记。 max或min子句将根据您要查找的结果应用于标记。使用此查询作为第二个查询的源,您可以使用运动员,事件和标记字段之间的直接链接将其链接回初始表。 what the second query should look like
这解决了第一部分。我不确定如何使用查询获得每个事件的前十名。
答案 1 :(得分:0)
我不拥有或无权访问MS Access,但我可以为您提供SQL,并希望Access支持一些基本语法。
选项1:如果Row
是您的主键,则更容易,但您不需要在结果中返回它;在这种情况下,您甚至可以使用简单的查询为同一行中的同一运动员同时获得MIN
和MAX
的{{1}}和Mark
:
SELECT Athlete, Event, Meet, MAX(Mark) AS HighestMark, MIN(Mark) AS LowestMark FROM MyTable GROUP BY Athlete, Event, Meet
注意:我假设您也希望按Meet
进行分组,但如果不是这样,您可以将其从GROUP BY
中移除,但其值会在结果中失去意义。
选项2:Row
是主键,但您确实需要返回它 - 显然在这种情况下,min和max不能在同一行中返回,并且查询看起来完全不同:
SELECT Row, Athlete, Event, Mark, Meet FROM MyTable m0 WHERE m0.Row IN (SELECT MAX(Row) FROM MyTable m1 WHERE Athlete = m0.Athlete AND Event = m0.Event AND Meet = m0.Meet Mark = (SELECT MAX(Mark) FROM MyTable WHERE Athlete = m1.Athlete AND Event = m1.Event AND Meet = m1.Meet) GROUP BY Athlete, Event, Meet, Mark)
很少注意到:
MAX(Mark)
;将其更改为MIN(Mark)
以返回最低值JOIN
重写;我不确定Access更喜欢哪种方法(即运行得更快)MAX(Row)
用于确保如果相同的运动员在相同的比赛和事件中获得相同的马克,则仅选择1行;在这种情况下,返回的Row
越大MIN
和MAX
,但代价是额外的子查询,但您没有要求