您可以将Window
Functions与frames一起使用:
SELECt Date, Price, CASE WHEN ROW_NUMBER() OVER (ORDER BY DATE) >= 3 THEN AVG(Price) OVER (ORDER BY Date ROWS BETWEEN 2 PRECEDING ANDCURRENT ROW) ELSE NULL END AS avgFROM yourTableORDER BY Date;
DB小提琴演示
细节:
2 PRECEDING
表示当前行上方的两行(当前行除外)。我们在上明确定义了升序Date
。因此,这意味着两个最接近的日期,低于当前行的日期CURRENT ROW
表示当前行。BETWEEN
使我们能够考虑定义范围内的行(包括边界条件)。- 因为,你要移动平均线是
null
对前两排,我们可以检查此使用Row_number()
功能Case .. When



