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

问题描述

我有一个 MysqL 数据库,其中包含一个包含日期列表的表。我需要在那个表的空白处找到第一天和最后一天。它们是某些员工在过去 30 天内的休假天数。我正在使用:

Select DATE,LEAD(DATE,1) over(ORDER BY DATE DESC) AS PREVDATE,datediff(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 子句来过滤这些点它不起作用。

我做错了什么?

感谢您的帮助!!!

解决方法

您需要子查询才能访问 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;