chức năng cửa sổ với tùy chỉnh khung làm cho điều này đơn giản đến kinh ngạc :
SELECT ts
,avg(val) OVER (ORDER BY ts
ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;
Bản trình diễn trực tiếp trên sqlfiddle.
Khung cho mỗi mức trung bình là hàng hiện tại cộng với hàng sau 7. Điều này giả sử bạn có chính xác một hàng cho mỗi giờ. Dữ liệu mẫu của bạn dường như ngụ ý điều đó, nhưng bạn không chỉ định.
Nguyên tắc là, avg_8h
cho trận chung kết (theo ts
) 7 hàng của tập hợp được tính với ít hàng hơn, cho đến khi giá trị của hàng cuối cùng bằng giá trị trung bình của chính nó. Bạn không chỉ rõ cách giải quyết trường hợp đặc biệt.