【问题标题】:How to get dynamic month's data depending on the Conditon in sql如何根据sql中的条件获取动态月份的数据
【发布时间】:2014-06-03 06:27:56
【问题描述】:

我正在从事金融领域的工作。 所以我想要四月到五月的数据。

假设当前月份是六月,那么我只想要今年的四月到六月,它应该按年和月分组。

如果假设当前月份是 2 月,那么我想要从 去年 4 月到 1 月的详细信息 即 2013 年 4 月至 2014 年 1 月

我为此写了 CTE 表达式我得到了部分结果我不知道我做错了还是正确

declare @Month int 
declare @Year int ;
set @Month = 4;
set @Year = YEAR(GETDATE());

if (@Month <= MONTH(GETDATE()))
    with cte as 
    (
    SELECT N = 4, YYY =  YEAR(GETDATE())
    UNION ALL
    SELECT N + 1, YYY
    FROM cte
    WHERE N+1 <= MONTH(GETDATE())
    )
    select N, YYY from cte

else  

    with cte as 
    (

    SELECT N = 4 , YYYY = YEAR(GETDATE() - 1)
    UNION ALL
    SELECT N + 1,YYYY
    FROM cte
    WHERE N+1 <= 12     
    )
    select N, YYYY from cte

我想要这样的 O/P

如果当前月份大于 4 月,则或更具体地说,假设当前月份是 6 月 那么

April 2014
May   2014
June  2014

如果当前月份是 2014 年 2 月,那么我想要

April 2013
May   2013
June  2013
July  2013   
Aug   2013 
Sep   2013
Oct   2013
Nov   2013
Dec   2013
Jan   2014
Feb   2014

谢谢。

【问题讨论】:

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


    【解决方案1】:
    DECLARE @CurrentDate AS datetime = '20150212';
    DECLARE @FirstDayInCurrentMonth AS datetime = DATEADD(day, 1 - DATEPART(day, @CurrentDate), @CurrentDate);
    DECLARE @LastApril AS datetime = DATEADD(month, -(DATEPART(month, @FirstDayInCurrentMonth) + 8) % 12, @FirstDayInCurrentMonth);
    
    WITH Periods AS (
        SELECT @LastApril AS [Period]
      UNION ALL
        SELECT DATEADD(month, 1, [Period])
        FROM Periods
        WHERE [Period] < @FirstDayInCurrentMonth
    )
    SELECT DATENAME(month, [Period])
          ,DATEPART(year, [Period])
    FROM Periods
    

    请注意,这仅在 4 月的几天内返回 april。从您的问题中不清楚您是想要 1 个月还是 13 个月作为 4 月的几天。

    【讨论】:

    • 您好,先生。假设我当前月份是六月,那么我只想要四月,五月,六月是否可能
    • 我想要一个月的所有日子,因为我想按月分组,这会返回所有的日子
    • 您的评论没有意义。你想分组什么?如果您还有其他问题,请提出新问题。 (您可以将 DATEADD(month.. 更改为 DATEADD(day.. 以获取日期,但它只会重复月份名称)
    • 不,你给出了正确的答案,但我只想确保它会返回所有月份的所有日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多