该表由以下脚本表示:
CREATE TABLE sales (
id SERIAL PRIMARY KEY,
product_id INTEGER,
sales_date DATE,
quantity INTEGER,
price NUMERIC
);
INSERT INTO sales (product_id, sales_date, quantity, price) VALUES
(1, '2023-01-01', 10, 10.00),
(1, '2023-01-02', 12, 12.00),
(1, '2023-01-03', 15, 15.00),
(2, '2023-01-01', 8, 8.00),
(2, '2023-01-02', 10, 10.00),
(2, '2023-01-03', 12, 12.00);
任务是对每个产品_id过go 3天的销售数量进行总和.该期间必须从每个产品_id的最大(最后)日期起向后计数.因此,对于1来说,最大值是2023-01-03,对于2来说也是如此.但对于产品_id 2,最后一天可能与1不同-假设是2023-01-05.
通过在子查询中应用具有窗口功能的此查询:
select product_id, max(increasing_sum) as quantity_last_3_days
from
(SELECT product_id,
SUM(quantity) OVER (PARTITION BY product_id ORDER BY sales_date RANGE BETWEEN INTERVAL '2 days'
PRECEDING AND CURRENT ROW) AS increasing_sum
FROM sales) as s
group by product_id;
我收到预期输出:
| product_id | quantity_last_3_days |
|____________|______________________|
|_____1______|___________37_________|
|_____2______|___________30_________|
但这是最佳解决方案吗?有什么方法可以通过使用不带子查询的窗口函数来解决这个问题吗?