【问题标题】:How do I get 'n' number of rows of dates preceded by current date in SQL Server?如何在 SQL Server 中获取当前日期前面的“n”行日期?
【发布时间】:2014-03-05 12:20:50
【问题描述】:

实际情况是,我提供输入作为预测数据的年份。 假设 ForecastYear 是 2016 年。

那么结果应该是

-------------
ForecastYear
-------------
2014
2015
2016
-------------

【问题讨论】:

  • 假设 ItemA 在 2013 年的销售额为 100年份 |数量 | -------------------- ITM-A| 2013 | 100 | ITM-B| 2013 | 200 | -------------------- 如果我想预测 2015 年的销售数据项目 | 2013 | 2014 | 2014 | ------------------------------------------- 项目-A | 100 | 110 | 121 |--每年数量增加其 B 项的 10% | 200 | 220 | 242 |--上一年数量--------------------------------

标签: sql-server sql-server-2008 datetime


【解决方案1】:
Declare @toyear int=2016

;with CTE as
(
select year(getdate()) years
union all
select years+1 from cte where years<@toyear
)
select * from cte

【讨论】:

    【解决方案2】:

    你可以使用一个数字表,那么它很简单:

    DECLARE @ForecastYear int
    SET @ForecastYear  = 2016
    DECLARE @NumYears int
    SET @NumYears  = 3
    
    SELECT TOP (@NumYears) ForecastYear = n 
    FROM dbo.Numbers
    WHERE n > @ForecastYear - @NumYears
    ORDER BY n
    

    如何创建数字表:

    SELECT TOP (1000000) n = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id]))
    INTO dbo.Numbers
    FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2
    OPTION (MAXDOP 1);
    
    CREATE UNIQUE CLUSTERED INDEX n ON dbo.Numbers(n)
    ;
    

    Generate a set or sequence without loops

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2015-05-06
      相关资源
      最近更新 更多