ROWS BETWEEN ... AND ...
?是 SQL 窗口函數中的一個子句,用于定義窗口函數操作的行范圍。窗口函數允許用戶對一組相關的記錄執行計算,這些記錄被稱為窗口。
基本語法
<窗口函數> OVER ( [PARTITION BY <列名>] ORDER BY <列名> [ASC | DESC] [ROWS BETWEEN <開始位置> AND <結束位置>]
)
PARTITION BY
:可選,用于將數據分成多個窗口或分區。ORDER BY
:指定窗口內數據的排序方式。ROWS BETWEEN ... AND ...
:指定窗口的起始行和結束行
ROWS BETWEEN 的選項
UNBOUNDED PRECEDING:從分區的第一行開始。
1 preceding 前1行
1 following 后1行
N PRECEDING:從當前行的前 N 行開始。
CURRENT ROW:當前行。
N FOLLOWING:從當前行的后 N 行開始。
UNBOUNDED FOLLOWING:從分區的最后一行開始(這在實際應用中很少使用,因為這會包括分區中的所有行)。
需求實現
計算每個銷售日期及其前后各一天的總銷售額,有如下的?sales
?表:
CREATE TABLE sales ( sale_date DATE, amount DECIMAL(10, 2)
); INSERT INTO sales (sale_date, amount) VALUES
('2023-01-01', 100),
('2023-01-02', 150),
('2023-01-03', 200),
('2023-01-04', 120),
('2023-01-05', 80);
hsql實現
SELECT sale_date, amount, SUM(amount) OVER ( ORDER BY sale_date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS rolling_3_day_total
FROM sales;