2017-10-19 18 views
0

我想要使用SQL查詢來滾動70周,65周和60周(單獨)數據。我知道如何在幾年和幾個月內做到這一點,但我如何獲得一個滾動的65週數據等?在SQL Server中獲取滾動週數據

+0

向我們展示一些代碼,你的努力。你如何定義一個滾動周?從一週的某一天開始? – Tanner

+0

滾動周應該是我的where子句中的數據範圍,但是每次查詢運行時,它都會返回65周範圍內的數據等 – dLight

回答

2

如果我理解正確,你要知道有多少周是一個日期跨度,從2016-01-說01至2017-01-14。

在您轉換日期爲int(從天1900-01-01)像這樣convert(int,DateColumn)

因此,你可以簡單地轉換日期爲int,減,然後通過7

例如劃分的SQL Server

2016年1月1日= 42368

2017年1月14日= 42747

(42747 - 42368)/ 7 = 54

一個SQL查詢會是這個樣子:

select (convert(int,GETDATE()) - convert(int,DateColumn))/7 as WeeksAgo from Table 

用在一個WHERE語句來獲得最後65周:

select * from Table where ((convert(int,GETDATE()) - convert(int,DateColumn))/7) < 65 
+0

對不起,如果問題不是很清楚。 我想檢索該日期範圍的數據以滿足客戶的特定需求。有些人需要60周,65周和70周左右的滾動數據。每次他們收到查詢時,他們都會查看過去65周內的數據,具體取決於客戶。 – dLight

+0

好的,那麼這應該工作: select * from Table where((convert(int,GETDATE()) - convert(int,DateColumn))/ 7)<65 – Thorgeir

0

不多來自這個問題繼續下去,但你可以使用理貨表

DECLARE @StartDateTime DATE = GETDATE() --Pick a starting Point 

--tally tables http://www.sqlservercentral.com/articles/T-SQL/62867/ 
--===== Conditionally drop 
IF OBJECT_ID('dbo.Tally') IS NOT NULL 
    DROP TABLE dbo.Tally 

--===== Create and populate the Tally table on the fly 
SELECT TOP 11000 --equates to more than 30 years of dates 
    IDENTITY(INT,1,1) AS N 
INTO dbo.Tally 
FROM Master.dbo.SysColumns sc1, 
    Master.dbo.SysColumns sc2 

--===== Add a Primary Key to maximize performance 
ALTER TABLE dbo.Tally 
    ADD CONSTRAINT PK_Tally_N 
     PRIMARY KEY CLUSTERED (N) WITH FILLFACTOR = 100 


SELECT 
    DATEADD(WEEK, T.N, @StartDateTime) 'Week70' 
FROM dbo.Tally T 
WHERE 
    T.N <= 70 

SELECT 
    DATEADD(WEEK, T.N, @StartDateTime) 'Week65' 
FROM dbo.Tally T 
WHERE 
    T.N <= 65 

SELECT 
    DATEADD(WEEK, T.N, @StartDateTime) 'Week60' 
FROM dbo.Tally T 
WHERE 
    T.N <= 60 
+0

Hello Cool_Br33ze, 謝謝。但是,您如何加入Tally表以便能夠在您的where子句中使用它? – dLight

+0

@dLight我沒有加入Tally表,但是從中選擇N(棕色),並在'DATEADD'函數中使用它。理貨是避免使用CURSOR的好方法 –