我正在尝试使用MAX()
函数作为子查询来过滤整个过去几年中我的更大查询的结果。我意识到这比我最初想象的要复杂一点,所以我创建了一个更简单的查询来测试我需要用HAVING
子句做什么才能让它工作。
我已经检查了这两个帖子,但它没有真正帮助(SQL, HAVING clause explained,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
答案 0 :(得分:2)
我认为这可以在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)
答案 1 :(得分:1)
您遇到的问题是您按年份进行分组,因此最大值将始终与该组的年份相同。
以下是使用window functions
的一个选项:
select distinct fiscalyear
from (
select fiscalyear, max(fiscalyear) over () maxfiscalyear
from dates
) t
where fiscalyear >= maxfiscalyear - 2
我也不认为这里需要使用convert
功能,但如果需要,可以将其添加回来。