微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。