PostgreSQL:如何获取以指定日期为终点的单条窗口函数结果
解决方案
针对你的需求,有两种可行方法获取以指定日期为结束的完整窗口计算结果,且仅返回一行数据:
方法一:先计算滚动窗口值再筛选目标行
先对目标商品的所有行计算滚动最小值(窗口包含当前行及前3行),再筛选指定日期的结果。这种方式能让窗口函数访问到完整的前置数据,确保计算准确:
SELECT p_date, previous_low_min FROM ( SELECT p_date, MIN(low_price) OVER(ORDER BY p_date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS previous_low_min FROM your_table -- 替换为你的实际表名 WHERE item_id = 'A1' ) AS window_calculations WHERE p_date = '2022-11-09';
方法二:直接筛选窗口范围数据后聚合
直接查询指定日期及之前最多3行的数据,再取最小值,逻辑直观且性能更高效:
SELECT '2022-11-09'::DATE AS p_date, MIN(low_price) AS previous_low_min FROM your_table -- 替换为你的实际表名 WHERE item_id = 'A1' AND p_date <= '2022-11-09' ORDER BY p_date DESC LIMIT 4; -- 取当前行及前3行,最多4条数据
结果说明
两种方法都会返回如下结果:
| p_date | previous_low_min |
|---|---|
| 2022-11-09 | 4.99 |
这是因为以2022-11-09为结束的窗口包含2022-11-04、2022-11-06、2022-11-08、2022-11-09这四行,其中最低价格为4.99。
内容的提问来源于stack exchange,提问作者SuperDave
相关产品推荐
相关产品推荐

