我有一列值,我需要取两个先前值和当前值的平均值并显示为新列。我使用的是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
答案 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