Sql 如何编写在给定日期提取每年数据的查询
我有一个查询,其中我需要提取给定日期的索赔数据,并返回该日期之前每年的数据,例如 我今天提出索赔:2019年1月15日 我希望能够在一个通用查询中提取所有其他年份,因为这将是一个存储过程 这将使我能够查看过去几年中,在给定的日期是否有索赔 如果我要创建一个变量或案例陈述,我可以分别完成1年、2年、3年的工作,但有没有一种方法可以以更简单的方式完成 以下是1年前的代码:Sql 如何编写在给定日期提取每年数据的查询,sql,sql-server,ssms,Sql,Sql Server,Ssms,我有一个查询,其中我需要提取给定日期的索赔数据,并返回该日期之前每年的数据,例如 我今天提出索赔:2019年1月15日 我希望能够在一个通用查询中提取所有其他年份,因为这将是一个存储过程 这将使我能够查看过去几年中,在给定的日期是否有索赔 如果我要创建一个变量或案例陈述,我可以分别完成1年、2年、3年的工作,但有没有一种方法可以以更简单的方式完成 以下是1年前的代码: SELECT * FROM tblClaim c WHERE c.IncidentDate = DATEadd(year, -1
SELECT * FROM tblClaim c
WHERE c.IncidentDate = DATEadd(year, -1, CAST(FLOOR( CAST(GETDATE() AS FLOAT)) AS DATETIME)) AND c.StatusID = 2
嗯?仅使用日期部分应该更容易:
SELECT c.*
FROM tblClaim c
WHERE c.StatusID = 2 AND
DAY(c.IncidentDate) = DAY(GETDATE()) AND
MONTH(c.IncidentDate) = MONTH(GETDATE());
注二:
- 2月29日当心
- 这将不使用索引
CREATE TABLE #tblClaim (statusid INT, incidentdate DATE)
INSERT INTO #tblClaim (statusid, incidentdate)
VALUES (1,'2019-01-15'),(2,'2019-01-15'),(1,'2018-01-15'),(2,'2018-01-15'),
(1,'2017-01-15'),(2,'2016-01-15'),(1,'2012-02-29'),(2,'2012-02-29'),
(1,'2016-02-29'),(2,'2016-02-29'),(1,'2008-02-29'),(2,'2008-02-29'),
(1,'2012-02-28'),(2,'2012-02-28'),(1,'2016-03-01'),(2,'2016-03-01'),
(1,'2008-03-01'),(2,'2008-02-28');
然后我创建了一个proc(相应地调整需要显示的变量):
CREATE PROC dbo.myproc as
声明@leapyear INT=229
声明@date=GETDATE()
--DECLARE@date date='20160229'此查询将提供3年的数据
select [date] from TableName where (year([date]) = year(getdate())-1
or year([date]) = year(getdate())-2
or year([date]) = year(getdate())-3)
好吧,但是我怎么做闰年呢,因为我不能排除that@TylerStevens . . . 再问一个问题,明确闰年该做什么。修改这个问题似乎会显著改变它:“我需要提取给定日期的索赔数据,并返回该日期之前每年的数据”。这回答了您提出的问题。感谢您的帮助和解释
select [date] from TableName where (year([date]) = year(getdate())-1
or year([date]) = year(getdate())-2
or year([date]) = year(getdate())-3)