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;