用途:面向业务分析场景,帮助编写和解释 SQL 窗口函数与 OVER 子句,处理排名、累计、移动平均、同环比、分群等分析型查询。
主要能力:涵盖排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)、聚合窗口(SUM、AVG、COUNT、MIN、MAX)、偏移函数(LAG、LEAD、FIRST_VALUE、LAST_VALUE、NTH_VALUE)与统计函数(PERCENT_RANK、CUME_DIST、PERCENTILE_CONT、PERCENTILE_DISC)。提供帧子句写法,如 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW、ROWS BETWEEN 6 PRECEDING AND CURRENT ROW、RANGE BETWEEN INTERVAL '30' DAY PRECEDING AND CURRENT ROW。
使用方式:按 function_name(expression) OVER ([PARTITION BY ...] [ORDER BY ...] [frame_clause]) 组织查询;复杂逻辑建议用 CTE 分步计算,先聚合再套窗口,最后筛选。示例覆盖分组内 Top N、累计占比、7 日移动平均、月环比与同比、订单间隔与流失识别、客户生命周期、队列留存、销售排名、库存流水等模式。
平台差异:PostgreSQL 支持 FILTER 与 GROUPS 帧;BigQuery、Snowflake 支持 QUALIFY 直接过滤窗口结果;SQL Server 有 OFFSET 帧等特性。
限制与注意:LAST_VALUE 默认帧只到当前行,需显式指定完整帧;默认帧行为可能不符合预期,建议显式写出 frame clause;性能上可在 PARTITION BY 与 ORDER BY 列上建复合索引,并尽量先缩小数据集。具体版本兼容性与执行计划需结合实际数据库验证。