只有当一个记录符合条件时,MS Access才能获得平均值

只有当一个记录符合条件时,MS Access才能获得平均值

问题描述:

在MS Access中,我试图获取数据的平均值,但只有当每个集合的最后一个记录大于某个值时。几乎有它,但不能得到最后一部分。所以,我的数据看起来像这样:只有当一个记录符合条件时,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,所以本周是五月-28-2011和唯一的点数> 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; 

我应该回去

CarID AvgF 
3AA 321.6666 

我将如何把一个标准只对当前一周,但回到三个星期它通过标准是什么?

+0

什么是协议如果我认为我找到了解决方案/张贴评论或添加到原始帖子?无论如何,如果我更换CarId =(选择CarId从tblCars与CarId IN(选择CarId从tblCars我认为这将做到这一点? – sinDizzy 2011-06-03 21:50:31

+0

你可以回答自己的问题,或者你可以简单地删除该问题。另一个选项问meta.stackoverflow。 com你认为你应该做什么 – 2011-06-03 21:55:34

您可以使用此查询来显示哪些汽车有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; 

INNER在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; 
+0

我也喜欢这个解决方案。 – sinDizzy 2011-06-04 18:06:01