LAG 可以和 HAVING 一起使用吗?

Can LAG be used with HAVING?

我清楚地记得T-SQL绝对不会让你把LAGWHERE混在一起。例如,

SELECT FOO
WHERE LAG(BAR) OVER (ORDER BY DATE) > 7

永远行不通。 T-SQL不管你做什么都不会运行。但是 T-SQL 有没有让你把 LAGHAVING 混在一起?

注意:答案需要做的就是给出一个基于理论或基于文档的原因,说明它为什么不存在,或者给出任何它存在的地方的例子。

Having 子句只能与 Group by 子句一起使用。为了使用 Group by 列出的列应该使用 Group by 列进行聚合。 Group by 只能与聚合函数一起使用,例如 min,max,sum,count 函数。因此,不可能将 having 子句与 LAG 分析函数组合在一起。

为了使用 LAGHaving,应该使用 CTE 或子查询。

来自Logical Processing Order of the SELECT statement

The following steps show the logical processing order, or binding order, for a SELECT statement......

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE or WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

Window 函数在 SELECT 级别计算,在 HAVING 之后,所以答案是 你可以'在 HAVING 子句中使用 window 函数。