wxf666
2022-08-05 09:39:14 +08:00
数据库新手试答一下
前面有大佬说了,任意连续 7 天必包含周六周日。只需算过去 7 天非周六周日的平均数即可
『 MySQL 语法(应该是这样吧)』:
WITH
orig_data(date, num) AS (
VALUES
ROW('2022-07-29', 1), ROW('2022-07-23', 5),
ROW('2022-07-30', 2), ROW('2022-07-21', 11),
ROW('2022-07-31', 3), ROW('2022-06-11', 22),
ROW('2022-08-01', 4), ROW('2022-06-10', 12),
ROW('2022-08-02', 5),
ROW('2022-08-03', 6),
ROW('2022-08-04', 7),
ROW('2022-08-05', 8)
)
SELECT *,
avg(CASE WHEN weekday(date) < 5 THEN num ELSE null END)
OVER (ORDER BY date(date) RANGE INTERVAL 6 DAY PRECEDING) avg
FROM orig_data
『结果』:
date num avg
————— —— ————
2022-06-10 12 12.0000
2022-06-11 22 12.0000
2022-07-21 11 11.0000
2022-07-23 5 11.0000
2022-07-29 1 1.0000
2022-07-30 2 1.0000
2022-07-31 3 1.0000
2022-08-01 4 2.5000
2022-08-02 5 3.3333
2022-08-03 6 4.0000
2022-08-04 7 4.6000
2022-08-05 8 6.0000