2017-10-19 87 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的好方法 –