MS Access SQL - 前3行的平均值

时间:2016-11-02 20:36:41

标签: sql ms-access

我有一列值,我需要取两个先前值和当前值的平均值并显示为新列。我使用的是MS Access 2013,使用SQL代码而不是SQL查询向导更为熟悉。所以,如果你能提供代码,我会很感激。

我已经阅读了其他关于Lag函数的线程,但我相信Access不允许这样做。此外,我已经看到类似的问题用子查询回答,但我还不熟悉那些。

以下是我正在寻找的内容。如果列A(1,2,3,4,5),我如何制作B(0,0,2,3,4)?

A   |  B
----------
1   |  0  
2   |  0 
3   |  2   =  (1+2+3)/3
4   |  3   =  (2+3+4)/3
5   |  4   =  (3+4+5)/3

1 个答案:

答案 0 :(得分:1)

当A的值为BETWEEN a - 2和A时,使用自联接到同一个表。

SELECT
    t.A
    ,SUM(pre.A) / 3 as B
FROM
    TableName t
    LEFT JOIN TableName pre
    ON pre.A >= (t.A - 2)
    AND pre.A <= t.A
GROUP BY
    t.A

请注意,这实际上会给你0,1,2,3,4。如果你想要0,0,2,3,4你将需要计算前面的行来确定是否有三个,如果没有,则为0,如:

SELECT
    t.A
    ,IIF(COUNT(pre.A) < 3, 0, SUM(pre.A) / 3) as B
FROM
    TableName t
    LEFT JOIN TableName pre
    ON pre.A >= (t.A - 2)
    AND pre.A <= t.A
GROUP BY
    t.A