【问题标题】:Current month minus 5 months for all years worth of data所有年份数据的当月减去 5 个月
【发布时间】:2022-11-17 02:27:16
【问题描述】:

我正在尝试获取当前数据之前第 5 个月的数据。我努力了

MONTH(GETDATE()) - MonthNum ='5'

其中 monthnum 已从以前的 CTE 中的日期解析。

这适用于第 6 个月及以后,但不适用于前几个月。

最终目标是,例如在 11 月,我只能看到 6 月的数据,而不仅仅是当前年份的所有年份。

SELECT * 
FROM TABLE 
WHERE MONTH(GETDATE()) - AnniMonthNum ='5'

【问题讨论】:

  • 请添加您尝试过的完整 SQL;输入示例;预期输出示例;所以我们可能会在这里为您提供最好的帮助 - 包括表/列定义,因为它可能会改变此处的答案。
  • 你的问题是你如何解释“这适用于第 6 个月及以后但不适用于前几个月”的年份范围。
  • 为什么不用DATEADDMONTH('20210101') -5将给出“月份”-4;没有第-4个月。
  • “最终目标是……我可以看到数据……所有年”。您是否要求每年单独排成一行?您实际上是在计算代码示例中的标量,这在问题的上下文中没有意义。您只是要求将数据集限制在 6 月份(或更具体地说,是当月之前的 5 个月)吗?如果是这样,那么DECLARE @month = MONTH(DATEADD(month,-5,GETDATE())); SELECT * FROM table as t WHERE MONTH(t.transaction_date) = @month; 澄清您的问题以获得实际答案。
  • 例如,我想查看当前月份减去 5 个月的每一年的所有销售额。所以在 11 月,我想查看 6 月所有年份的所有销售额

标签: sql sql-server


【解决方案1】:

根据您的说明,试试这个:

DECLARE @month = MONTH(DATEADD(month,-5,GETDATE())); 

SELECT t.* 
FROM table as t 
WHERE MONTH(t.transaction_date) = @month;

或者,如果在视图中使用,则直接在 WHERE 子句中替换计算,如下所示:

SELECT t.* 
FROM table as t 
WHERE MONTH(t.transaction_date) = MONTH(DATEADD(month,-5,GETDATE()));

如果您已经计算出月数,则将该变量替换为 DATEADD 函数中的时间间隔。下面我通过将 monthnum 乘以 -1 来确保间隔为负。

SELECT t.* 
FROM table as t 
WHERE MONTH(t.transaction_date) = MONTH(DATEADD(month,-1 * monthnum,GETDATE()));

【讨论】:

    【解决方案2】:

    尝试使用 DateDiff

      where DateDiff(month,AnniversaryDate,GetDate)=5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多