gpt4 book ai didi

mysql - 带有 WHERE 子句的 Lag() 函数

转载 作者:行者123 更新时间:2023-12-02 16:40:11 26 4
gpt4 key购买 nike

我有这个可以正常工作的 sql 函数:

SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table

但我想在差值 (dif) 等于 0 或大于某个值时选择所有 out_hum。当我输入这段代码时,出现错误...

SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table WHERE dif=0

我该如何解决这个问题?

最佳答案

where 子句无法访问 select 子句中定义的表达式的别名(因为,基本上,前者在 后者之前处理) .最重要的是,对窗口函数有一个特殊的限制,它不能出现在查询的 where 子句中(它们只允许出现在 selectorder by 子句)。

有些数据库支持 qualify 子句,它解决了语言限制 - 但不幸的是 MySQL 不支持。典型的解决方案是使用派生表,例如子查询:

select *
from (
select out_hum, out_hum - lag(out_hum) over (order by id) as dif
from excel_table
) t
where dif = 0

注意事项:

  • 减法前后的括号是不必要的

  • 1lag()的第二个参数的默认值,所以不需要指定

关于mysql - 带有 WHERE 子句的 Lag() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61879104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com