SQL组通过具有语句的位置



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选择带有领带的顶部,因此,如果您每行ReportingDateProductId组合超过一行,则将其工作。(但与此同时,这意味着数据无论如何都不确定)

edit - 我的意思是,如果您的数据中有矛盾,那么您将获得2行。

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

最新更新