我如何 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).