如何使用sql查询找到最近10年

时间:2015-07-14 10:51:35

标签: sql sql-server

我正在进行sql查询,我必须找到最近10年。假设这是2015年那么查询应该返回2015,2014,2013 ......依此类推。为此,我使用了以下查询 -

select top 10 DATEPART(Year,getdate()) order by DATEPART(Year,getdate()) desc

但是上面的查询只返回当前年份的单个查询。请帮助我一个人。

3 个答案:

答案 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。