窗口函数(Window Functions)中的Window子句用于指定计算的范围,即函数对哪些行进行操作。其默认范围取决于是否同时使用了PARTITION BYORDER BY子句。

  1. 当只有ORDER BY子句,没有PARTITION BYWindow子句时

    • 默认的Window范围是从整个结果集的第一行到当前行,即RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  2. 当使用PARTITION BY子句但没有明确指定Window子句时

    • Window函数会在每个由PARTITION BY定义的分区内独立运行。
    • 对于每个分区,如果没有明确指定Window子句且只有ORDER BY,则默认的Window范围仍然是从该分区的第一行到当前行。
  3. 当没有ORDER BYWindow子句时

    • 如果Window函数没有ORDER BY子句(无论是否有PARTITION BY),并且没有明确指定Window子句,那么Window的范围默认是整个分区(如果有PARTITION BY)或整个结果集(如果没有PARTITION BY)。但请注意,这种情况下,某些窗口函数(如LEADLAG)可能无法正常工作,因为它们需要明确的顺序来确定“前一行”或“后一行”。
  4. Window子句的具体形式

    • Window子句可以明确指定范围,如(ROWS | RANGE) BETWEEN ... AND ...。其中ROWS表示按物理行数计算,而RANGE则可能基于某些字段值的范围来计算。
    • 常见的范围选项有:
      • UNBOUNDED PRECEDING:从分区的开始到当前行
      • N PRECEDING:从当前行往前数N行
      • CURRENT ROW:当前行
      • N FOLLOWING:从当前行往后数N行
      • UNBOUNDED FOLLOWING:从当前行到分区的结束

结合上述信息,可以总结出窗口函数Window子句的默认范围通常是从分区的开始到当前行(如果使用了PARTITION BYORDER BY),或者整个分区/结果集(如果没有ORDER BY且没有明确指定Window子句)。但在实际使用中,为了明确和精确控制计算范围,通常会显式指定Window子句。