Sql MS Access仅当一条记录满足条件时才达到平均值
在MS Access中,我试图获得数据的平均值,但仅当每组的最后一条记录大于某个值时。差不多有了,但不能得到最后一部分。因此,我的数据如下所示:Sql MS Access仅当一条记录满足条件时才达到平均值,sql,ms-access,group-by,aggregate,average,Sql,Ms Access,Group By,Aggregate,Average,在MS Access中,我试图获得数据的平均值,但仅当每组的最后一条记录大于某个值时。差不多有了,但不能得到最后一部分。因此,我的数据如下所示: CarID WeekOf NumDataPoints Fuel 3AA May-14-2011 4 300 7BB May-14-2011 9 250 3AA May-21-2011 35 310
CarID WeekOf NumDataPoints Fuel
3AA May-14-2011 4 300
7BB May-14-2011 9 250
3AA May-21-2011 35 310
7BB May-21-2011 7 275
3AA May-28-2011 24 355
7BB May-28-2011 4 280
我的记录集应该只包括当前点数>=5的汽车的平均燃油量。因此,本周是2011年5月28日,唯一点数>=5的汽车是汽车3AA。其他几周的积分是多少并不重要。我试过了
SELECT CarId, Avg(Fuel) AS AvgF
FROM tblCars
WHERE WeekOf>=#5/14/2011# And WeekOf<=#5/28/2011# AND
CarId = (SELECT CarId FROM tblCars
WHERE WeekOf=#5/28/2011# AND NumDataPoints>=5)
GROUP BY CarId;
我如何仅在当前一周设置条件,但在通过条件时返回三周?您可以使用此查询显示哪些车辆具有5个或更多NumDataPoints
SELECT CarID FROM tblCars
WHERE
(((WeekOf)=#2011-05-28#)
AND ((NumDataPoints)>=5));
这将平均每辆车在3周内的燃油值
SELECT CarID, Avg(Fuel) AS AvgF
FROM tblCars
WHERE
(((WeekOf)>=#2011-05-14#
And (WeekOf)<=#2011-05-28#))
GROUP BY CarID;
内部在CarID上连接它们,以便第一个查询从第二个查询中选择汽车的子集
SELECT whichcars.CarID, fuel_averages.AvgF
FROM
[SELECT CarID FROM tblCars
WHERE
(((WeekOf)=#2011-05-28#)
AND ((NumDataPoints)>=5))
]. AS whichcars
INNER JOIN [SELECT CarID, Avg(Fuel) AS AvgF
FROM tblCars
WHERE
(((WeekOf)>=#2011-05-14#
And (WeekOf)<=#2011-05-28#))
GROUP BY CarID
]. AS fuel_averages
ON whichcars.CarID = fuel_averages.CarID;
如果我认为我找到了解决方案/发表了评论或添加到原始帖子中,协议是什么?无论如何,如果我将CarId=从tblCars中选择CarId替换为从tblCars中选择CarId,我认为这样做是正确的?您可以回答自己的问题,也可以简单地删除该问题。另一个选择是在meta.stackoverflow.com上询问您认为应该做什么
SELECT whichcars.CarID, fuel_averages.AvgF
FROM
[SELECT CarID FROM tblCars
WHERE
(((WeekOf)=#2011-05-28#)
AND ((NumDataPoints)>=5))
]. AS whichcars
INNER JOIN [SELECT CarID, Avg(Fuel) AS AvgF
FROM tblCars
WHERE
(((WeekOf)>=#2011-05-14#
And (WeekOf)<=#2011-05-28#))
GROUP BY CarID
]. AS fuel_averages
ON whichcars.CarID = fuel_averages.CarID;