访问SQL查询:使用2个连接表查找每个玩家测试日期的最新日期条目

时间:2015-07-02 17:12:18

标签: sql ms-access

我有1个表和1个通过玩家ID加入的查询。我想只显示tblPlayerLogistics和玩家姓名中的身高和体重列的最新测试日期结果以及来自qryPlayersExtended的玩家ID

PlayerID位于表和查询中,并且它们已连接。 我在tblplayerlogistics中有playerID,height,weight和testdate 我在qryPlayersExtended中有PlayerID,玩家名称

我想要一个只返回一个玩家记录的查询,该记录标记了玩家ID和玩家名称,其中每个玩家的最高身高和体重由testdate确定。

查询名称:qryPlayersExtended 表名:tblPlayerLogistics

我已经附上了我想要在图像中做的事情。这是一个玩家的例子,但我会有多个玩家有多个考试日期

我几周来一直在努力争取任何帮助。我看了上一篇文章,但仍然无法弄明白 similar post

2 个答案:

答案 0 :(得分:0)

假设任何一个日期的玩家测试不超过一次。警告,航空代码。创建新查询qryLastTestDate: SELECT PlayerID, Max(TestDate) as LastTestDate FROM tblplayerlogistics Group By PlayerID创建第二个查询qryLastTest: SELECT tblplayerlogistics.PlayerID, tblplayerlogistics.TestDate, tblplayerlogistics.height, tblplayerlogistics.weight FROM tblplayerlogistics INNER JOIN qryLastTestDate ON tblplayerlogistics.PlayerID = qryLastTestDate.PlayerID and tblplayerlogistics.TestDate = qryLastTestDate.LastTestDate 您的最终查询将是: SELECT qryPlayersExtended.PlayerID, qryPlayersExtended.[Player Name], qryLastTest.TestDate, qryLastTest.Height, qryLastTest.Weight FROM qryPlayersExtended INNER JOIN qryLastTest ON qryPlayersExtended.PlayerID = qryLastTest.PlayerID;根据需要添加其他字段。

答案 1 :(得分:0)

您需要两个查询。

首先,您需要一个获取每位玩家最新日期的查询。它将有两列:PlayerId和Max(TestDate),由PlayerId分组。我已将此qryMaxPlayerTestDates命名为。它看起来像这样:

SELECT PlayerId, Max(TestDate) AS MaxDate
FROM tblPlayerLogistics
GROUP BY PlayerId;

第二次,您加入PlayerId和Dates(MaxDate / TestDate)以获得Max(TestDate)限制的结果。它看起来像这样:

SELECT tblPlayerLogistics.PlayerId, tblPlayerLogistics.Height, 
tblPlayerLogistics.Weight, tblPlayerLogistics.TestDate, 
qryPlayersExtended.PlayerName
FROM qryPlayersExtended INNER JOIN (qryMaxPlayerTestDates 
INNER JOIN tblPlayerLogistics 
ON (qryMaxPlayerTestDates.MaxDate = tblPlayerLogistics.TestDate) 
AND (qryMaxPlayerTestDates.PlayerId = tblPlayerLogistics.PlayerId)) 
ON qryPlayersExtended.PlayerId = qryMaxPlayerTestDates.PlayerId;

如果您的日期不是每个玩家重复(没有玩家每个日期有多个测试,或者同一日期的两个测试有不同的时间),您将在结果中获得每个玩家一行的高度/重量最新的考试日期。