1

我有一个 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 个结果)。任何帮助,将不胜感激。

4

2 回答 2

1

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

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

我的解决方案包括查找每个 ID 的最新年份(查询 A),然后修改年份标签以连接到表 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; 
于 2013-01-10T23:09:39.427 回答
0

您可以使用此查询获取所需的Year和值:ID

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);
于 2013-01-10T22:49:32.343 回答