Ms access 访问选择唯一标识符的最新条目
我有一个访问表,每个唯一标识符有多个日期条目Ms access 访问选择唯一标识符的最新条目,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我有一个访问表,每个唯一标识符有多个日期条目 Year ID TotalSpent 2003-2004 001 1000 2002-2003 001 900 2001-2002 001 100 2009-2010 002 8000 2008-2009 002 4000 2000-2001 003 100 1999-2000 003 0 我想为每一个唯一的ID保留最新的顶级条目 Year ID TotalSpent 2003-2004 001 1000 200
Year ID TotalSpent
2003-2004 001 1000
2002-2003 001 900
2001-2002 001 100
2009-2010 002 8000
2008-2009 002 4000
2000-2001 003 100
1999-2000 003 0
我想为每一个唯一的ID保留最新的顶级条目
Year ID TotalSpent
2003-2004 001 1000
2009-2010 002 8000
2000-2001 003 100
我已经查看了top函数,但无法使其产生超过1个结果,而不是每个唯一ID产生1个结果。如有任何帮助,将不胜感激。您可以通过此查询获得所需的年份和ID值:
选择ID,Max[年]作为MaxOfYear
从你的桌子上
按ID分组;
然后,要获得相应的TotalExplored值,请将该SQL用于连接到表的子查询
选择y.年份、y.ID、y.TotalExplored
从…起
你的桌子太脏了
内连接
选择ID,Max[年]作为MaxOfYear
从你的桌子上
按ID分组
作为子
在…上
y、 年份=次年
y.ID=子ID;
您可以通过此查询获取所需的年份和ID值:
选择ID,Max[年]作为MaxOfYear
从你的桌子上
按ID分组;
然后,要获得相应的TotalExplored值,请将该SQL用于连接到表的子查询
选择y.年份、y.ID、y.TotalExplored
从…起
你的桌子太脏了
内连接
选择ID,Max[年]作为MaxOfYear
从你的桌子上
按ID分组
作为子
在…上
y、 年份=次年
y.ID=子ID;
Remou提出了一个有效的观点,即一个唯一的ID将是有益的,因为它将允许在将来引用顶行,但这可能是一个超出您控制范围的约束 数据源使用连字号年份有点笨拙,这会妨碍简单的分组查询。第二个问题是,您不能仅仅根据TotalExplored字段的最大值进行分组,因为它可能不是最后一个字段。例如,大额退款可能会影响一年的总计 我的解决方案包括为每个ID查询A查找最近的年份,然后将年份标记改为联接到表B上。我不想对计算字段执行联接,因此我将其包装到另一个子查询B中。然后将其联接到原始表/查询,以提取关键行和值
SELECT YourTable.[YourYearField],
YourTable.ID,
YourTable.TotalSpent
FROM (SELECT A.ID,
[StartYear] & "-" & [EndYear] AS Grouping
FROM (SELECT YourTable.ID,
Max(Val(Right$([YourYearField], 4))) AS EndYear,
Max(Val(Right$([YourYearField], 4)) - 1) AS StartYear
FROM YourTable
GROUP BY YourTable.ID) AS A
GROUP BY A.ID,
[StartYear] & "-" & [EndYear]) AS B
INNER JOIN YourTable
ON ( B.Grouping = YourTable.[YourYearField] )
AND ( B.ID = YourTable.ID )
GROUP BY YourTable.[YourYearField],
YourTable.ID,
YourTable.TotalSpent;
Remou提出了一个有效的观点,即一个唯一的ID将是有益的,因为它将允许在将来引用顶行,但这可能是一个超出您控制范围的约束 数据源使用连字号年份有点笨拙,这会妨碍简单的分组查询。第二个问题是,您不能仅仅根据TotalExplored字段的最大值进行分组,因为它可能不是最后一个字段。例如,大额退款可能会影响一年的总计 我的解决方案包括为每个ID查询A查找最近的年份,然后将年份标记改为联接到表B上。我不想对计算字段执行联接,因此我将其包装到另一个子查询B中。然后将其联接到原始表/查询,以提取关键行和值
SELECT YourTable.[YourYearField],
YourTable.ID,
YourTable.TotalSpent
FROM (SELECT A.ID,
[StartYear] & "-" & [EndYear] AS Grouping
FROM (SELECT YourTable.ID,
Max(Val(Right$([YourYearField], 4))) AS EndYear,
Max(Val(Right$([YourYearField], 4)) - 1) AS StartYear
FROM YourTable
GROUP BY YourTable.ID) AS A
GROUP BY A.ID,
[StartYear] & "-" & [EndYear]) AS B
INNER JOIN YourTable
ON ( B.Grouping = YourTable.[YourYearField] )
AND ( B.ID = YourTable.ID )
GROUP BY YourTable.[YourYearField],
YourTable.ID,
YourTable.TotalSpent;
如果您有一个唯一的标识符,那么这将容易得多。那个表上有ab自动编号id吗?或者只有多个id行?如果您有唯一的标识符,这会容易得多。该表上是否有ab自动编号id,或者只有多个id行?