LAG 可以和 HAVING 一起使用吗?
Can LAG be used with HAVING?
我清楚地记得T-SQL绝对不会让你把LAG
和WHERE
混在一起。例如,
SELECT FOO
WHERE LAG(BAR) OVER (ORDER BY DATE) > 7
永远行不通。 T-SQL不管你做什么都不会运行。但是 T-SQL 有没有让你把 LAG
和 HAVING
混在一起?
注意:答案需要做的就是给出一个基于理论或基于文档的原因,说明它为什么不存在,或者给出任何它存在的地方的例子。
Having
子句只能与 Group by
子句一起使用。为了使用 Group by
列出的列应该使用 Group by
列进行聚合。 Group by
只能与聚合函数一起使用,例如 min,max,sum,count
函数。因此,不可能将 having
子句与 LAG
分析函数组合在一起。
为了使用 LAG
和 Having
,应该使用 CTE 或子查询。
来自Logical Processing Order of the SELECT statement:
The following steps show the logical processing order, or binding
order, for a SELECT statement......
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE or WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
Window 函数在 SELECT
级别计算,在 HAVING
之后,所以答案是 否 你可以'在 HAVING
子句中使用 window 函数。
我清楚地记得T-SQL绝对不会让你把LAG
和WHERE
混在一起。例如,
SELECT FOO
WHERE LAG(BAR) OVER (ORDER BY DATE) > 7
永远行不通。 T-SQL不管你做什么都不会运行。但是 T-SQL 有没有让你把 LAG
和 HAVING
混在一起?
注意:答案需要做的就是给出一个基于理论或基于文档的原因,说明它为什么不存在,或者给出任何它存在的地方的例子。
Having
子句只能与 Group by
子句一起使用。为了使用 Group by
列出的列应该使用 Group by
列进行聚合。 Group by
只能与聚合函数一起使用,例如 min,max,sum,count
函数。因此,不可能将 having
子句与 LAG
分析函数组合在一起。
为了使用 LAG
和 Having
,应该使用 CTE 或子查询。
来自Logical Processing Order of the SELECT statement:
The following steps show the logical processing order, or binding order, for a SELECT statement......
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE or WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
Window 函数在 SELECT
级别计算,在 HAVING
之后,所以答案是 否 你可以'在 HAVING
子句中使用 window 函数。