我想找到三天平均值。预期的输出:
<表类>
dt
amt
running_avg
tbody><<tr>2022-05-1 100 0 2022-05-2 150 0 2022-05-3 50 100 2022-05-14 250 150 2022-05-15 0 100 表类>
似乎你需要一个ROWS/RANGE
参数在窗口的AVG()
:
数据:
SELECT *
INTO trans
FROM (VALUES
(CONVERT(date, '20220501'), 100),
(CONVERT(date, '20220502'), 150),
(CONVERT(date, '20220503'), 50),
(CONVERT(date, '20220514'), 250),
(CONVERT(date, '20220515'), 0)
) v (dt, amt)
声明:
SELECT
dt,
amt,
AVG(amt) OVER (ORDER BY dt ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS running_avg,
CASE WHEN COUNT(*) OVER (ORDER BY dt ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) = 3
THEN AVG(amt) OVER (ORDER BY dt ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
ELSE 0
END AS running_avg2
FROM trans
ORDER BY dt
结果:
<表类>
dt
amt
running_avg
running_avg2
tbody><<tr>2022-05-01 100 100 0 2022-05-02 150 125 0 2022-05-03 50 100 100 2022-05-14 250 150 150 2022-05-15 0 100 100 表类>