在 MySQL 中使用带有别名的 HAVING 时出现问题

Problem when using HAVING with aliases in MySQL

我有一个 MySQL 数据库,其中 table 包含一个日期列表。我需要在 table 的空白处找到第一天和最后一天。它们是某些员工在过去 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 的点是我休假的点,但是我包括了子句必须过滤那些不起作用的点。

我做错了什么?

感谢您的帮助!!!

您需要子查询才能访问 GAP 别名。此外,您需要一个适当的 WHERE 子句,该子句以单词“where.”开头。

WITH cte AS (
    SELECT DATE,
           LEAD(DATE) OVER (ORDER BY DATE DESC) AS PREVDATE,
           DATEDIFF(DATE, LEAD(DATE) OVER (ORDER BY DATE DESC)) AS GAP
    FROM DAYSWORKED
    WHERE DATE > DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
)

SELECT *
FROM cte
WHERE GAP > 1;