Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 访问选择唯一标识符的最新条目_Ms Access_Ms Access 2010 - Fatal编程技术网

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行?