我如何 select 前几年的数据 SQL?
How do I select data from previous years in SQL?
我尝试使用 WHERE (YEAR(InceptionDate), -3, GETDATE())
,但是
SELECT
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed,
SUM(AmountDenied) AmountDenied,
SUM(AmountDenied) * 100.0 / SUM(AmountCharged) AS DeniedPart
FROM
Fact.ClaimDetailVw
WHERE
(YEAR(InceptionDate), -5, GETDATE())
-- WHERE YEAR(InceptionDate) = 2019 AND
AND VetCompanyName <> 'Unknown'
GROUP BY
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate)
HAVING
SUM(AmountCharged) <> 0
ORDER BY
CompanyName
但是我得到一个错误
An expression of non-boolean type specified in a context where a condition is expected, near ','
这不是数据问题,所以不提供数据集。如您所见,它在注释代码中有效,但这仅适用于 2019 年。我想要过去 5 年的数据
如果你想要过去 5 年(包括今年)......
WHERE YEAR(InceptionDate) BETWEEN YEAR(GETDATE()) - 4 AND YEAR(GETDATE())
...如果您想要前 5 年不包括当前年份...
WHERE YEAR(InceptionDate) BETWEEN YEAR(GETDATE()) - 5 AND YEAR(GETDATE()) - 1
…这是一种安全的方法,因为它考虑到未来日期数据(即 budget/forecast 数据)的可能性。
首先获取你想要的年份作为开始日期
--get start year
declare @StartYear int = year(getdate()) - 5;
select @StartYear
SELECT
CompanyName,
ServiceSubCodeName,
subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed ,
SUM(AmountDenied) AmountDenied ,
SUM(AmountDenied)*100.0/SUM(AmountCharged) ASDeniedPert
FROM Fact.ClaimDetailVw
WHERE YEAR(InceptionDate) > @StartYear
AND VetCompanyName <> 'Unknown'
GROUP BY CompanyName,ServiceSubCodeName,subdiagnosisName, YEAR(InceptionDate)
HAVING SUM(AmountCharged) <> 0
ORDER BY CompanyName
您最好计算 5 年前的第一年,然后查询该 date/time 值。
SELECT
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed,
SUM(AmountDenied) AmountDenied,
SUM(AmountDenied) * 100.0 / SUM(AmountCharged) AS DeniedPart
FROM
Fact.ClaimDetailVw
WHERE
InceptionDate >= DATETIMEFROMPARTS(YEAR(GETDATE()) - 4, 1, 1, 0, 0, 0, 0)
AND VetCompanyName <> 'Unknown'
GROUP BY
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate)
HAVING
SUM(AmountCharged) <> 0
ORDER BY
CompanyName
如果你想排除今年 - 你可以添加
AND InceptionDate < DATETIMEFROMPARTS(YEAR(GETDATE()), 1, 1, 0, 0, 0, 0)
如果列 InceptionDate 被定义为日期数据类型 - 那么您可以使用 DATEFROMPARTS(YEAR(GETDATE()) - 4, 1, 1).
我尝试使用 WHERE (YEAR(InceptionDate), -3, GETDATE())
,但是
SELECT
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed,
SUM(AmountDenied) AmountDenied,
SUM(AmountDenied) * 100.0 / SUM(AmountCharged) AS DeniedPart
FROM
Fact.ClaimDetailVw
WHERE
(YEAR(InceptionDate), -5, GETDATE())
-- WHERE YEAR(InceptionDate) = 2019 AND
AND VetCompanyName <> 'Unknown'
GROUP BY
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate)
HAVING
SUM(AmountCharged) <> 0
ORDER BY
CompanyName
但是我得到一个错误
An expression of non-boolean type specified in a context where a condition is expected, near ','
这不是数据问题,所以不提供数据集。如您所见,它在注释代码中有效,但这仅适用于 2019 年。我想要过去 5 年的数据
如果你想要过去 5 年(包括今年)......
WHERE YEAR(InceptionDate) BETWEEN YEAR(GETDATE()) - 4 AND YEAR(GETDATE())
...如果您想要前 5 年不包括当前年份...
WHERE YEAR(InceptionDate) BETWEEN YEAR(GETDATE()) - 5 AND YEAR(GETDATE()) - 1
…这是一种安全的方法,因为它考虑到未来日期数据(即 budget/forecast 数据)的可能性。
首先获取你想要的年份作为开始日期
--get start year
declare @StartYear int = year(getdate()) - 5;
select @StartYear
SELECT
CompanyName,
ServiceSubCodeName,
subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed ,
SUM(AmountDenied) AmountDenied ,
SUM(AmountDenied)*100.0/SUM(AmountCharged) ASDeniedPert
FROM Fact.ClaimDetailVw
WHERE YEAR(InceptionDate) > @StartYear
AND VetCompanyName <> 'Unknown'
GROUP BY CompanyName,ServiceSubCodeName,subdiagnosisName, YEAR(InceptionDate)
HAVING SUM(AmountCharged) <> 0
ORDER BY CompanyName
您最好计算 5 年前的第一年,然后查询该 date/time 值。
SELECT
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate),
SUM(AmountCharged) AmountCharged,
SUM(AmountAllowed) AmountAllowed,
SUM(AmountDenied) AmountDenied,
SUM(AmountDenied) * 100.0 / SUM(AmountCharged) AS DeniedPart
FROM
Fact.ClaimDetailVw
WHERE
InceptionDate >= DATETIMEFROMPARTS(YEAR(GETDATE()) - 4, 1, 1, 0, 0, 0, 0)
AND VetCompanyName <> 'Unknown'
GROUP BY
CompanyName, ServiceSubCodeName, subdiagnosisName,
YEAR(InceptionDate)
HAVING
SUM(AmountCharged) <> 0
ORDER BY
CompanyName
如果你想排除今年 - 你可以添加
AND InceptionDate < DATETIMEFROMPARTS(YEAR(GETDATE()), 1, 1, 0, 0, 0, 0)
如果列 InceptionDate 被定义为日期数据类型 - 那么您可以使用 DATEFROMPARTS(YEAR(GETDATE()) - 4, 1, 1).