通过Where语句创建SQL组
我有一个通过Where语句创建SQL组,sql,ms-access,group-by,aggregate-functions,Sql,Ms Access,Group By,Aggregate Functions,我有一个MS Access表,跟踪月末的产品数量,如下所示。 我需要在指定日期生成指定ProductId的最新数量,例如。 2012年2月15日ProductId 1的数量为100,2012年3月15日ProductId 1的数量为150 ProductId | ReportingDate | Quantity| 1 | 31-Jan-12 | 100 | 2 | 31-Jan-12 | 200 | 1
MS Access
表,跟踪月末的产品数量,如下所示。
我需要在指定日期生成指定ProductId的最新数量,例如。
2012年2月15日ProductId 1的数量为100
,2012年3月15日ProductId 1的数量为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))
选择Sheet1.ProductId,Max(Sheet1.ReportingDate)作为MaxOfReportingDate,Sheet1.Quantity
从第1页开始
按Sheet1.ProductId、Sheet1.Quantity、Sheet1.ReportingDate、Sheet1.ProductId分组
有((Sheet 1.ReportingDate)以下是@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
如果您选择的是单一产品,您可以使用order by并选择Top 1。您的预期输出是什么?谢谢,代码工作得很好。虽然我不知道您在评论中的意思……我理解了。数据中任何一对都只有一个ProdId日期组合,但这是我需要注意的。非常感谢@StuartLC
ProductId | ReportingDate | Quantity|
1 | 31-Jan-12 | 100
1 | 31-Jan-12 | 200