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
功能,但如果需要,可以添加回来。
我正在尝试使用 MAX()
函数作为子查询来过滤我过去整整几年的更大查询的结果。我意识到这比我最初认为需要的要复杂一点,所以我创建了一个更简单的查询来测试我需要用 HAVING
子句做什么才能让它工作。
我已经检查了这两个帖子,但并没有真正帮助 (
我认为我对 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
功能,但如果需要,可以添加回来。