SQL Server:获取刚刚包含整数1-12的月列的最后7个月数据



我在Alteryx中有一个数据集,该数据集将数年和几个月的整数列(例如月份:1-12 and Years:2018)中,我能够动态选择最后一个一年,但无法弄清楚如何仅动态接收数据的最后7个月。我知道我可以将月和年结合起来,并将其转换为DateTime格式以使用DateAdd(),但是我的其余工作流程取决于它们分开。无论如何,是否有SQL或Alteryx中可以实现这一目标?

ex:
current_month = 2,因此必须返回sales_month = 1、12、11、10、9、8、7

current_month = 12,因此必须返回sales_month = 11、10、9、8、7、6、5

任何指导都会有所帮助,尝试了许多不同的潜在解决方案。谢谢!

尝试下面的最后7个月号

  SELECT  MONTH(DATEADD(mm, -m, GETDATE())) AS m,
            LEFT(DATENAME(mm,  DATEADD(mm, -m, GETDATE())), 3) AS n,
            YEAR(DATEADD(mm, -m, GETDATE())) AS y
    FROM    (VALUES (0),(1),(2),(3),(4),(5),(6),(7)) t(m)

m   name    y
3   Mar 2019
2   Feb 2019
1   Jan 2019
12  Dec 2018
11  Nov 2018
10  Oct 2018
9   Sep 2018
8   Aug 2018

将此输出用作CTE,并与您的桌子一起加入最后7个月

好吧,您可以进行类似的比较:

where (@current_month >= 7 and sales_month > @current_month - 7) or
      (@current_month < 7 and
       (sales_month > 0 or
        sales_month > 12 - (@current_month - 7)
      )

您可以使用DATEFROMPARTSWHERE子句中构建DATE,然后将其扔进一个额外的变量以进行比较日期,只是为了避免在WHERE条款中保留它。

DECLARE @current_month INT = 1
       ,@current_year INT = 2019
DECLARE @compDate DATE = DATEFROMPARTS(@current_year,@current_month,DAY(GETDATE()))
SELECT
 *
FROM @t
WHERE 
 DATEFROMPARTS(current_year,current_month,DAY(GETDATE())) >= DATEADD(MONTH, -7, @compDate)
 AND
 DATEFROMPARTS(current_year,current_month,DAY(GETDATE())) < @compDate

结果:

+---------------+--------------+
| current_month | current_year |
+---------------+--------------+
|             6 |         2018 |
|             7 |         2018 |
|             8 |         2018 |
|             9 |         2018 |
|            10 |         2018 |
|            11 |         2018 |
|            12 |         2018 |
+---------------+--------------+

这是用于测试的表:

DECLARE @t TABLE
(
  current_month INT NOT NULL,
  current_year INT NOT NULL
);
INSERT @t
  (
    current_month
   ,current_year
  )
VALUES
  (1, 2018),
  (2, 2018),
  (3, 2018),
  (4, 2018),
  (5, 2018),
  (6, 2018),
  (7, 2018),
  (8, 2018),
  (9, 2018),
  (10, 2018),
  (11, 2018),
  (12, 2018),
  (1, 2019),
  (2, 2019),
  (3, 2019);

您可以使用 DATEFROMPARTSDATETIMEFROMPARTS来执行此操作。

SELECT DISTINCT sales_month
FROM your_table
WHERE DATEFROMPARTS(sales_year,sales_month,1) BETWEEN DATEADD(MONTH,-8,CURRENT_TIMESTAMP) AND DATEADD(MONTH,-1,CURRENT_TIMESTAMP)

相关内容

  • 没有找到相关文章

最新更新