[英]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
混合在一起?
注意:答案需要做的就是给出一个基于理论或基于文档的原因,或者给出任何例子。
以下步骤显示了 SELECT 语句的逻辑处理顺序或绑定顺序......
- 从
- 上
- 加入
- 在哪里
- 通过...分组
- WITH CUBE 或 WITH ROLLUP
- 拥有
- SELECT
- 清楚的
- 订购方式
- 最佳
Window 函数在SELECT
级别进行评估,在HAVING
之后,所以答案是否定的,你不能在HAVING
子句中使用 window 函数。
Having
子句只能与Group by
子句一起使用。 为了使用Group by
列出的列,应使用Group by
列进行聚合。 Group by
只能与min,max,sum,count
函数等聚合函数一起使用。 因此,不可能将having
子句与LAG
分析 function 结合起来。
为了使用LAG
和Having
,应该使用 CTE 或子查询。
可以在同一级别对窗口化 function 进行过滤,但需要 SQL 服务器不支持的语言扩展 (QUALIFY)。
资格:
在 SELECT 语句中,QUALIFY 子句过滤 window 函数的结果。
QUALIFY 对 window 函数的作用与 HAVING 对聚合函数和 GROUP BY 子句的作用相同。
样本:
CREATE TABLE tab(FOO STRING, BAR INT, DATE DATE);
INSERT INTO TAB(FOO, BAR, DATE)
VALUES ('a', 1, '2021-02-10'), ('b', 10, '2021-02-11'),
('c', 11, '2021-02-12'), ('d', 12, '2021-02-12');
SELECT *
FROM TAB
QUALIFY LAG(BAR) OVER (ORDER BY DATE) > 7;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.