2013-01-10 130 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;