我具有以下一般的表格结构,我需要计算每天平均3/6/9/12的月份,而无需使用滞后函数。
Date | Amount
01-01-2018 | 100
02-01-2018 | 700
03-01-2018 | 300
etc
例如,2018年7月15日的3个月平均值将查找6月15日,5月15日和4月15日的值.5月31日的3个月平均值将需要查找4月30日,3月31日和2月的值28.
LAG可以很好地工作,但是具有可变的偏移量,性能绝对令人恐惧。始终保持说1的偏移量,它可以非常快速地工作。我有日期索引。
下面是我当前的代码,每天使用LAG每天平均要找到3个月的代码,但是同样由于性能不佳,我需要一种很难找到的替代方法。我尝试每天预先计算偏移值,并在函数中引用该列值,但这对性能没有帮助。
(Lag([Amount], DateDiff(d, DateAdd(month, -1, [Date]), [Date]), NULL) OVER (ORDER BY [Date] ASC) +
Lag([Amount], DateDiff(d, DateAdd(month, -2, [Date]), [Date]), NULL) OVER (ORDER BY [Date] ASC) +
Lag([Amount], DateDiff(d, DateAdd(month, -3, [Date]), [Date]), NULL) OVER (ORDER BY [Date] ASC)
) / 3
任何帮助将不胜感激!
答案 0 :(得分:0)
您可以尝试加入:
select (t1.amount + t2.amount + t3.amount) / 3
from t t1 left join
t t2
on t2.date = dateadd(month, -1, t1.date) left join
t t3
on t3.date = dateadd(month, -2, t1.date)