【发布时间】:2020-11-23 01:05:00
【问题描述】:
如果在同一个查询中多次提供一个窗口,它是如何评估的?查询解析器是否检查一个窗口是否与另一个窗口相同或是否容易从另一个窗口“派生”。例如以下:
SELECT
MAX(val) OVER (PARTITION BY product_id ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) one,
MAX(val) OVER (PARTITION BY product_id ORDER BY date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) two,
MAX(val) OVER (PARTITION BY product_id ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) three
FROM
table
数据库引擎如何“优化”这个查询(如果有的话)?它是否涉及计算单个窗口并改变它以进行其他计算,或者这是否会创建三个不同的窗口?我在哪里可以找到更多关于如何/何时评估窗口函数的信息(任何后端都可以——oracle、mysql、sqlserver、postgres)?
【问题讨论】: