簡體   English   中英

SQL Server:獲取僅包含整數1-12的month列的最后7個月的數據?

[英]SQL Server: Getting last 7 months of data for month column that just contains integers 1-12?

我在Alteryx中有一個數據集,可以將年份和月份放入不同的整數列中(例如,月份:1-12和年份:2018),我能夠動態選擇去年,但無法弄清楚如何僅動態接收年份。最近7個月的數據。 我知道我可以組合月份和年份並將其轉換為日期時間格式以使用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)
      )

您可以使用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)

您可以使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM