SQL组具有何处语句

时间:2014-01-28 09:58:30

标签: sql ms-access group-by aggregate-functions

我有一个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))

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,但如果每个ReportingDateProductId组合有多行,则无法使用。 (但与此同时,这意味着数据无论如何都不是确定性的)

编辑 - 我的意思是,如果您的数据与下面的数据存在矛盾,那么您将获得2行。

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