SQL- HAVING 子句问题

SQL- HAVING Clause Issue

我正在尝试使用 MAX() 函数作为子查询来过滤我过去整整几年的更大查询的结果。我意识到这比我最初认为需要的要复杂一点,所以我创建了一个更简单的查询来测试我需要用 HAVING 子句做什么才能让它工作。

我已经检查了这两个帖子,但并没有真正帮助 (, SQL: HAVING clause)

我认为我对 HAVING 子句的理解不正确,因为我不确定为什么它不起作用。有人能帮忙解释一下吗?

注意:[Fiscal Year]NVARCHAR,所以我认为将其转换为 INT 可能有效。

SELECT DISTINCT

D.[FISCAL YEAR]

FROM [Dates] AS D

GROUP BY D.[Fiscal Year]

HAVING CONVERT(INT,D.[Fiscal Year]) >= MAX(CONVERT(INT,D.[FISCAL YEAR])) -2

这些是我的结果:

(No column name)
2015
2014
2013
2012
2016

这些是我应该得到的结果:

(No column name)
2015
2014
2016

我认为 WHERE 子句中可以做得更好。此解决方案不是最佳解决方案,但您可以执行以下操作。

SELECT 
      DISTINCT D.[FISCAL YEAR]
FROM [Dates] AS D
      WHERE CONVERT(INT,d.[Fiscal Year]) 
             >= (SELECT MAX(CONVERT(INT,[Fiscal Year])) -2 from Dates)

您遇到的问题是您按年份分组,因此最大值将始终与该组的年份相同。

这是一个使用 window functions 的选项:

select distinct fiscalyear 
from (
    select fiscalyear, max(fiscalyear) over () maxfiscalyear
    from dates 
) t 
where fiscalyear >= maxfiscalyear - 2

我也看不出这里需要使用convert功能,但如果需要,可以添加回来。