【发布时间】:2021-09-08 13:32:52
【问题描述】:
我有一个 MySQL 数据库,其中包含一个包含日期列表的表。我需要在该表的空白处找到第一天和最后一天。它们是某些员工在过去 30 天内的休假天数。我正在使用:
Select DATE,
LEAD(DATE,1) over(ORDER BY DATE DESC) AS PREVDATE,
datediff(DATE,LEAD(DATE,1) over(ORDER BY DATE DESC)) AS GAP
from DAYSWORKED
DATE>date_sub(CURRENT_DATE, interval 30 DAY)
having GAP>1;
如果我在没有 HAVING 子句的情况下运行代码,我会得到一个日期和以前日期的列表,以及 GAP>1 的点是我休假的点,但是我包含子句 HAVING 来过滤这些点它不起作用。
我做错了什么?
感谢您的帮助!!!
【问题讨论】:
-
it doesn't work...您收到的确切错误消息是什么?您的查询缺少WHERE子句,但这可能只是一个复制错误。 -
请显示您的实际查询并解释“它不起作用”的意思; 会发生什么?还请编辑您的问题以显示
show create table DAYSWORKED的输出(作为文本,而不是图像)以及一些示例数据的插入语句以及该示例数据的期望和实际结果,以证明问题 -
GAP列包含 HAVING 子句中不允许的窗口函数,即使是隐式的。因为它会影响输出行集,因此它会影响在 HAVING 和 ORDER BY 之间获得的窗口函数(自身)结果。
标签: mysql where-clause alias having lead