在SQL Server中获取滚动周数据

在SQL Server中获取滚动周数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我希望使用SQL查询获得70周、65周和60周(单独)的滚动数据。我知道如何在数年或数月内完成这项工作,但如何获得滚动的65周数据等?问题没有太多内容,但您可以使用统计表 DECLARE @StartDateTime DATE = GETDATE() --Pick a starting Point --tally tables http://www.sqlservercentral.com/articles/T-SQL/62867/ --===== Conditionally drop IF

我希望使用SQL查询获得70周、65周和60周(单独)的滚动数据。我知道如何在数年或数月内完成这项工作,但如何获得滚动的65周数据等?

问题没有太多内容,但您可以使用统计表

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
DECLARE@StartDateTime DATE=GETDATE()--选择一个起点
--理货台http://www.sqlservercentral.com/articles/T-SQL/62867/
--=======有条件地删除
如果对象ID('dbo.Tally')不为空
下降表dbo.计数
--====动态创建并填充理货表
选择TOP 11000——相当于超过30年的日期
标识(INT,1,1)为N
进入dbo.Tally
从Master.dbo.SysColumns sc1,
Master.dbo.SysColumns sc2
--====添加主键以最大限度地提高性能
更改表dbo.Tally
添加约束参数
填充因子为100的主键群集(N)
挑选
DATEADD(周,T.N.@StartDateTime)'Week70'
来自dbo.T
哪里

T.N这个问题没有太多的内容,但你可以使用理货表

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
DECLARE@StartDateTime DATE=GETDATE()--选择一个起点
--理货台http://www.sqlservercentral.com/articles/T-SQL/62867/
--=======有条件地删除
如果对象ID('dbo.Tally')不为空
下降表dbo.计数
--====动态创建并填充理货表
选择TOP 11000——相当于超过30年的日期
标识(INT,1,1)为N
进入dbo.Tally
从Master.dbo.SysColumns sc1,
Master.dbo.SysColumns sc2
--====添加主键以最大限度地提高性能
更改表dbo.Tally
添加约束参数
填充因子为100的主键群集(N)
挑选
DATEADD(周,T.N.@StartDateTime)'Week70'
来自dbo.T
哪里

T.N如果我理解正确,你想知道一个日期范围内有多少周,比如从2016-01-01到2017-01-14

在sql server中,您可以将日期转换为int(从1900-01-01开始的日期),就像这样
convert(int,DateColumn)

因此,您可以简单地将日期转换为int,减法,然后除以7

比如说

2016-01-01=42368

2017-01-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
从表中选择*,其中((convert(int,GETDATE())-convert(int,DateColumn))/7)<65

如果我理解正确,您想知道一个日期范围内有多少周,比如从2016-01-01到2017-01-14

在sql server中,您可以将日期转换为int(从1900-01-01开始的日期),就像这样
convert(int,DateColumn)

因此,您可以简单地将日期转换为int,减法,然后除以7

比如说

2016-01-01=42368

2017-01-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
从表中选择*,其中((convert(int,GETDATE())-convert(int,DateColumn))/7)<65

向我们展示一些代码和您的努力。你如何定义滚动周?从一周中的某一天开始?滚动周应该是my where子句中的数据范围,但每次运行查询时,它都会返回65周范围内的数据,等等,向我们展示一些代码和您的工作。你如何定义滚动周?从一周中的某一天开始?滚动周应该是my where子句中的数据范围,但是每次运行查询时,它都会返回65周范围内的数据,等等。如果您不太清楚这个问题,请担心。我想检索该日期范围的数据,以满足客户的特定需求。有些人希望滚动数据为60周,有些人希望滚动数据为65周,有些人希望滚动数据为70周。每次收到查询时,他们都会查看过去65周内的示例数据,具体取决于客户。好的,这样应该可以:从表中选择*,其中((convert(int,GETDATE())-convert(int,DateColumn))/7)<65如果您不太清楚这个问题,很抱歉。我想检索该日期范围的数据,以满足客户的特定需求。有些人希望滚动数据为60周,有些人希望滚动数据为65周,有些人希望滚动数据为70周。每次收到查询时,他们都会查看过去65周内的示例数据,具体取决于客户。好的,这样应该可以:从表中选择*((convert(int,GETDATE())-convert(int,DateColumn))/7)<65Hello Cool\u Br33ze,谢谢。但是如何连接到理货表以便在where子句中使用它?@dLight我不是连接到理货表,而是从中选择N(数字)并在
DATEADD
函数中使用它。Tally是避免使用光标的好方法Hello Cool_Br33ze,谢谢。但是如何连接到理货表以便在where子句中使用它?@dLight我不是连接到理货表,而是从中选择N(数字)并在
DATEADD
函数中使用它。理货是避免使用光标的好方法