Sql 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

在MS Access中,我试图获得数据的平均值,但仅当每组的最后一条记录大于某个值时。差不多有了,但不能得到最后一部分。因此,我的数据如下所示:

 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;