在 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;
我有一个 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;