我有一个MS Access
表跟踪月末的产品数量,如下所示。
我需要在指定日期生成指定ProductId的最新数量,例如
ProductId 1 on 15-Feb-12 is 100
的数量,ProductId 1 on 15-Mar-12 is 150
的数量。
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))
答案 0 :(得分:2)
这是@naveen的想法:
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会选择带关联的top,但如果每个ReportingDate
,ProductId
组合有多行,则无法使用。 (但与此同时,这意味着数据无论如何都不是确定性的)
编辑 - 我的意思是,如果您的数据与下面的数据存在矛盾,那么您将获得2行。
ProductId | ReportingDate | Quantity|
1 | 31-Jan-12 | 100
1 | 31-Jan-12 | 200