我想在MS Access中获取计数字段的总和。在我的SQL中,我想要一个sum字段,每行计算该行的计数+接下来的11行的总和,然后依此类推。
Ref, Count, Yearly Sum
------------------------------
1508 3
1507 2
1506 5
1505 7
. .
. .
. .
1412 10
1411 11
1410 8
1409 6
1408 1
1407 6
... ...
因此想象我的查询看起来像上面的查询,我的目标是将行1508的和值作为从1508到1408(不包括1408)的计数之和,然后将1507作为计数之和1507至1407(再次排除)然后依此类推。
我想知道如何处理我的SQL以对字段中的前12行求和。
答案 0 :(得分:1)
您可以使用自我LEFT JOIN
并使用来自您的数据的技巧:
SELECT *, D.ref - I.ref
FROM data AS D
LEFT JOIN data AS I
ON I.Ref <= D.Ref
AND D.ref - I.ref < 100 /* 100 means 12 months here. for example - 1508 - 1408 = 100; < 100 means last 12 months */
ORDER BY D.ref DESC, I.ref DESC
这里的 100
值是一个神奇的数字,它将为您定义一个窗口,根据您的ref
列(假设ref
列是整数),这个窗口为12个月。您可以在此处查看扩展数据以及联接将如何识别去年的数据。以下是您的解决方案,即年度总和:
SELECT D.Ref, D.[Count], SUM(I.[Count])
FROM data AS D
LEFT JOIN data AS I
ON I.Ref <= D.Ref
AND D.ref - I.ref < 100 /* 100 means 12 months here. for example - 1508 - 1408 = 100; < 100 means last 12 months */
GROUP BY D.Ref, D.[Count]
ORDER BY 1 DESC ;
希望它有意义。