i在下一个月的结束月有一个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))
这是 @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选择带有领带的顶部,因此,如果您每行ReportingDate
,ProductId
组合超过一行,则将其工作。(但与此同时,这意味着数据无论如何都不确定)
edit - 我的意思是,如果您的数据中有矛盾,那么您将获得2行。
ProductId | ReportingDate | Quantity|
1 | 31-Jan-12 | 100
1 | 31-Jan-12 | 200