2014-01-28 97 views
0

我有一個MS Access表格跟蹤月末的產品數量如下。 我需要爲指定的日期產生指定ProductId的最新數量,例如 的數量爲ProductId 1 on 15-Feb-12 is 100,數量爲ProductId 1 on 15-Mar-12 is 150SQL Group通過在哪裏聲明

ProductId | ReportingDate | Quantity| 
1   | 31-Jan-12  | 100  | 
2   | 31-Jan-12  | 200  | 
1   | 28-Feb-12  | 150  | 
2   | 28-Feb-12  | 250  | 
1   | 31-Mar-12  | 180  | 
2   | 31-Mar-12  | 280  | 

下面我的SQL語句將所有以前的值而不是最新的一個值。任何人都可以幫助我解決查詢問題。

SELECT Sheet1.ProductId, Max(Sheet1.ReportingDate) AS MaxOfReportingDate, Sheet1.Quantity 
FROM Sheet1 
GROUP BY Sheet1.ProductId, Sheet1.Quantity, Sheet1.ReportingDate, Sheet1.ProductId 
HAVING (((Sheet1.ReportingDate)<#3/15/2012#) AND ((Sheet1.ProductId)=1)) 
+3

如果您選擇的單品,你可以通過使用順序,選擇前1 – Naveen

+0

什麼是您預期的輸出? – Incognito

回答

2

這裏的@納文的想法:

SELECT TOP 1 Sheet1.ProductId, Sheet1.ReportingDate AS MaxOfReportingDate, Sheet1.Quantity 
FROM Sheet1 
WHERE (Sheet1.ProductId = 1) 
AND (Sheet1.ReportingDate < #2012/03/15#) 
ORDER BY Sheet1.ReportingDate DESC 

雖然注意到MSACCESS選擇頂配的關係,所以如果你有每ReportingDate多行,ProductId組合這是不行的。 (但同時,這意味着數據不是確定性的)

編輯 - 我的意思是說,如果你的數據有如下的矛盾,你會得到2行。

ProductId | ReportingDate | Quantity| 
1   | 31-Jan-12  | 100  
1   | 31-Jan-12  | 200  
+0

謝謝你,代碼工作完美。雖然我不知道你的意思在你的評論中... – Avagut

+1

我已經更新了一個例子:) – StuartLC

+0

我明白了。數據只有1個ProdId日期組合對於任何一對,但這是我將在尋找的東西。非常感謝@StuartLC – Avagut