爱心小姐:计算不同日期范围内的过去年平均值

时间:2016-07-06 15:37:43

标签: sql ms-access

在ACCESS女士的表格中,用户可以从列表中选择商品(如铜,镍等),从列表中选择商品价格日期。 应计算过去12个月的平均商品价格。

例如:用户选择铜作为商品,2010年2月1日,02/01/2010。然后我希望在这段时间内计算平均价格:[02/01/2009 - 02/01/2010]。

我不确定如何在查询表单中写这个。这是当前不完整的代码;

SELECT Avg(CommPrices.Price) AS Expr1, 
FROM CommPrices
WHERE (((CommPrices.Commodity)=[Forms]![Tool Should Cost]![List243]))
AND CommPrices.DateComm = [Forms]![Tool Should Cost]![List55];

List243是用户可以选择的商品列表,list55是用户可以选择的日期列表。所有数据均来自表CommPrices。

注意:DateComm列中最早的日期是01/01/2008。因此,如果用户选择例如02/01/2008的日期,则无法计算2008年1月2日之前过去12个月的平均值。我确实希望代码仍然使用可用日期计算平均值。 (在这个例子中,它只是过去一个月的平均值)

第二个注释:DateComm列仅包含每月第一天的月度日期(例如01/01/2008,02/01 / 2008,03 / 01/2008)。 list55中列出的日期可以指代当月的不同日期(例如03/16/2009),在这种情况下,我希望代码仍然使用最接近的商品日期来计算过去12个月的平均值。因此,如果用户选择日期03/16/2009,我希望代码计算03/01/2008 - 03/01/2009的12个月平均值。

1 个答案:

答案 0 :(得分:2)

对于"整数"它将是几个月:

SELECT 
    Avg(CommPrices.Price) AS AveragePrice, 
FROM 
    CommPrices
WHERE 
    CommPrices.Commodity=[Forms]![Tool Should Cost]![List243]
    AND 
    CommPrices.DateComm = BETWEEN
        DateSerial(Year([Forms]![Tool Should Cost]![List55]) - 1, Month([Forms]![Tool Should Cost]![List55]), 1)
        AND
        DateSerial(Year([Forms]![Tool Should Cost]![List55]), Month([Forms]![Tool Should Cost]![List55]), 1)