2013-01-10 88 views
1

的最新的入门我有多个日期项的访问表中的每个唯一标识符访问选择的唯一标识符

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

+0

如果你确实有一个唯一的标识符,这将容易得多。是否有任何机会或只有多个ID行在该表上的自动编号? – Fionnuala

回答

0

你可以用这个查询得到你想要的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); 
1

Remou使得一个有效点的唯一ID将是有益的,因为这将允许指顶行的未来,但是这可能是你无法控制的约束。

的数据源是有点别扭与连字符的年,其防止一个简单的查询分组。第二个问题是,你根本不能只按TotalSpent字段的最大值进行分组,因为它可能不是最后一个字段(例如大的退款可能会影响总共数年)。

我的解决办法包括找到的最近一年的每个ID(查询),然后改革去年标签加入到表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;