如何在Microsoft Access中获取每个用户的最新比赛日期与结果?解决查询报错
解决Access查询聚合函数错误并获取用户最新比赛信息
错误原因
你遇到的错误源于Access聚合查询的规则:所有未使用聚合函数的字段必须出现在GROUP BY子句中。你的查询里SELECT包含了tblPlayer.PlayerName,但GROUP BY仅指定了tblParticipant.ParticipantID,不符合规则,因此触发报错。
如果仅修正GROUP BY只能获取用户名和最新比赛时间,无法直接关联对应比赛的Result字段。以下提供两种解决方案,优先推荐第二种以满足你获取最新比赛结果的需求。
方案一:修正GROUP BY(仅获取最新时间与用户名)
将tblPlayer.PlayerName加入GROUP BY子句,符合Access聚合规则:
SELECT Max(tblMatch.[MatchStart]) AS [MostRecent], tblPlayer.PlayerName FROM (tblMatch INNER JOIN tblParticipant ON tblMatch.MatchID=tblParticipant.ParticipantID) INNER JOIN tblPlayer ON tblParticipant.ParticipantID=tblPlayer.PlayerID GROUP BY tblParticipant.ParticipantID, tblPlayer.PlayerName;
方案二:子查询法(获取最新时间、用户名及对应比赛结果)
通过子查询先确定每个用户的最新比赛时间,再关联原表精准获取对应比赛的结果:
SELECT p.PlayerName, m.MatchStart AS MostRecent, m.Result FROM tblPlayer p INNER JOIN tblParticipant par ON p.PlayerID = par.ParticipantID INNER JOIN tblMatch m ON par.MatchID = m.MatchID INNER JOIN ( SELECT par_inner.ParticipantID, Max(m_inner.MatchStart) AS LatestMatchTime FROM tblMatch m_inner INNER JOIN tblParticipant par_inner ON m_inner.MatchID = par_inner.ParticipantID GROUP BY par_inner.ParticipantID ) sub ON par.ParticipantID = sub.ParticipantID AND m.MatchStart = sub.LatestMatchTime;
内容的提问来源于stack exchange,提问作者NickSentowski
相关产品推荐
相关产品推荐

