【问题标题】:Access select latest entry of unique identifier访问选择唯一标识符的最新条目
【发布时间】:2013-01-10 21:00:30
【问题描述】:

我有一个 Access 表,其中每个唯一标识符都有多个日期条目

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

标签: ms-access ms-access-2010


【解决方案1】:

Remou 提出了一个有效的观点,即唯一 ID 将是有益的,因为它允许在未来引用第一行,但这可能是您无法控制的限制。

数据源带有连字符的年份有点尴尬,这会阻止简单的分组查询。第二个问题是您不能只按TotalSpent 字段的最大值进行分组,因为它可能不是最后一个字段(例如,大额退款可能会影响一年的总数)。

我的解决方案包括查找每个 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; 

【讨论】:

    【解决方案2】:

    您可以通过此查询获得所需的 YearID 值:

    SELECT ID, Max([Year]) AS MaxOfYear
    FROM YourTable
    GROUP BY ID;
    

    然后,要获取相应的 TotalSpent 值,请将该 SQL 用于连接到 YourTable 的子查询。

    SELECT y.Year, y.ID, y.TotalSpent
    FROM
        YourTable AS y
        INNER JOIN
            (
                SELECT ID, Max([Year]) AS MaxOfYear
                FROM YourTable
                GROUP BY ID
            ) AS sub
        ON
                (y.Year = sub.MaxOfYear)
            AND (y.ID = sub.ID);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2022-11-23
      相关资源
      最近更新 更多