MS Access получает среднее значение, только если одна запись соответствует критериям - PullRequest
0 голосов
/ 04 июня 2011

В 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

Как бы я поставил критерий только на текущей неделе, но вернулся бы через три недели, когда он соответствует критериям?

1 Ответ

1 голос
/ 04 июня 2011

Вы можете использовать этот запрос, чтобы показать, какие автомобили имеют 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;
...