我正在进行sql查询,我必须找到最近10年。假设这是2015年那么查询应该返回2015,2014,2013 ......依此类推。为此,我使用了以下查询 -
select top 10 DATEPART(Year,getdate()) order by DATEPART(Year,getdate()) desc
但是上面的查询只返回当前年份的单个查询。请帮助我一个人。
答案 0 :(得分:2)
试试这个:
with yearlist as
(
select (DATEPART(Year,getdate())-10) as year
union all
select yl.year + 1 as year
from yearlist yl
where yl.year + 1 <= YEAR(GetDate())
)
select year from yearlist order by year desc;
答案 1 :(得分:1)
你可以在下面这样做:
DECLARE @YearsToPass INT
SET @YearsToPass = 10
;WITH cte AS
(
SELECT DATEPART(YY, GETDATE())- @YearsToPass + 1 as Years
UNION ALL
SELECT Years + 1 as Years
FROM cte
WHERE Years + 1 <= YEAR(GETDATE())
)
SELECT Years
FROM cte
ORDER BY Years DESC
简单地将@YearsToPass
设置为您想要返回的年数。
答案 2 :(得分:0)
FYI对于非CTE方法......
SELECT DATEPART(Year,DateAdd(Year,-I,getdate()))
FROM (
SELECT 0 AS I UNION
SELECT 1 AS I UNION
SELECT 2 AS I UNION
SELECT 3 AS I UNION
SELECT 4 AS I UNION
SELECT 5 AS I UNION
SELECT 6 AS I UNION
SELECT 7 AS I UNION
SELECT 8 AS I UNION
SELECT 9 AS I UNION
SELECT 10 AS I
) AS T
此
的统计信息SQL Server解析和编译时间:CPU时间= 0 ms,经过时间= 0毫秒。
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 0毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 4毫秒。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
(11行(s)受影响)
(1行受影响)
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 1毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 0毫秒。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
CTE的VS统计数据
SQL Server解析和编译时间:CPU时间= 0 ms,经过时间= 0毫秒。
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 0毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 3毫秒。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
(11行受影响)表&#39;工作台&#39;。扫描计数2,逻辑读取 67,物理读取0,预读读取0,lob逻辑读取0,lob 物理读取0,lob预读读取0。
(1行受影响)
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 3毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 0毫秒。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。