0

我在 Alteryx 中有一个数据集,将年份和月份放入不同的整数列(例如月份:1-12 和年份:2018),我已经能够动态选择去年,但无法弄清楚如何仅动态接收最近 7 个月的数据。我知道我可以结合月份和年份并将其转换为日期时间格式以使用 DATEADD(),但是,我的工作流程的其余部分取决于它们是分开的。无论如何用 SQL 或 Alteryx 来完成这个?

EX:
current_month = 2 所以它必须返回 sales_month = 1, 12, 11, 10, 9, 8, 7

或者

current_month = 12 所以它必须返回 where sales_month = 11, 10, 9, 8, 7, 6, 5

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

4

4 回答 4

0

尝试如下获取最近 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 个月

于 2019-03-07T15:30:54.853 回答
0

好吧,您可以像这样进行比较:

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)
      )
于 2019-03-07T15:34:22.953 回答
0

您可以使用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)
于 2019-03-07T15:54:23.410 回答
0

您可以使用DATE在您的WHERE子句中构造 a DATEFROMPARTS,然后为您的比较日期添加一个额外的变量,以避免在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);
于 2019-03-07T15:55:51.660 回答