Sql server 从时间戳创建日期范围

Sql server 从时间戳创建日期范围,sql-server,Sql Server,下面的查询从列时间戳中获取最大日期,作为调查中的起始日期。为EndDate添加90天。然后,只需在原始的结束日期上添加更多,就可以创建两个间隔为90天的范围 我试图让起始日期在1月1日、4月1日、7月1日或10月1日的4个桶内。如果最大时间戳在这些日期中的1个之前,那么这将是我的范围的第一个开始日期…因此,对于下面的示例,最大时间戳是6月4日,因此开始日期必须是7月1日。这在sql server中可行吗 医院时间戳1 Time_Stamp ----------- 2014-06-04 16:01

下面的查询从列
时间戳
中获取最大日期,作为
调查
中的起始日期。为EndDate添加90天。然后,只需在原始的结束日期上添加更多,就可以创建两个间隔为90天的范围

我试图让起始日期在1月1日、4月1日、7月1日或10月1日的4个桶内。如果最大时间戳在这些日期中的1个之前,那么这将是我的范围的第一个开始日期…因此,对于下面的示例,最大时间戳是6月4日,因此开始日期必须是7月1日。这在sql server中可行吗

医院时间戳1

Time_Stamp
-----------
2014-06-04 16:01:14.000
2014-06-04 15:55:33.000
2014-06-04 15:45:05.000
2014-06-04 15:36:15.000
2014-06-04 15:00:34.000
2014-06-04 14:35:24.000
2014-06-04 14:04:50.000
2014-06-04 13:46:55.000
2014-06-04 13:23:57.000
2014-06-04 11:27:51.000
电流输出:

StartDate   EndDate
----------- -----------
Jun  4 2014 Sep  2 2014
Sep  3 2014 Dec  2 2014
Dec  3 2014 Mar  3 2015
质疑

只是一个更新,这给了我第一个开始日期需要的东西

    --Return first day of next quarter
SELECT DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0)
FROM Survey
WHERE MainHospital = 'Hospital1'

看来你只是想计算你约会的四分之一,对吗

如果是,您可以使用:

SELECT DATENAME(Quarter, CAST(CONVERT(VARCHAR(8), GETDATE()) AS DATETIME)) as Quarter
您可以使用DATEPART(QUARTER,@Date)确定所选记录的季度,然后使用此查询查找该季度的开始/结束日期

像这样使用它:

SELECT  DATEADD(QUARTER, DATEPART(QUARTER, Time_Stamp) - 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, Time_Stamp), 0)) AS StartDate,
        DATEADD(SECOND, -1, DATEADD(QUARTER,  DATEPART(QUARTER, Time_Stamp) - 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, Time_Stamp), 0))) AS EndDate
FROM Hospital1

要计算季度日期范围,请执行以下操作:

select DATEADD(qq, datediff(qq, 0, getdate()),0) as first

select dateadd(dd, -1, DATEADD(qq, datediff(qq, 0, getdate()) +1, 0)) as last

可能包括像这样的
DATENAME(Quarter,CAST(将VARCHAR(8),Time\u Stamp)转换为DATETIME))
yep!刚刚发现,由于我正在创建90天的间隔,所以不确定如何将其包含在查询中。那么,您是否也在查找该季度的开始和结束日期?是的,选择时间戳的前1个最大值,确定从该日期算起的下一个季度(不是当前),并将其作为我查询中的第一个起始日期,我在其中添加天数以获取间隔。这看起来很有用,但不知道如何将其合并到我的查询和我的列时间戳中
SELECT  DATEADD(QUARTER, DATEPART(QUARTER, Time_Stamp) - 2, DATEADD(YEAR, DATEDIFF(YEAR, 0, Time_Stamp), 0)) AS StartDate,
        DATEADD(SECOND, -1, DATEADD(QUARTER,  DATEPART(QUARTER, Time_Stamp) - 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, Time_Stamp), 0))) AS EndDate
FROM Hospital1
select DATEADD(qq, datediff(qq, 0, getdate()),0) as first

select dateadd(dd, -1, DATEADD(qq, datediff(qq, 0, getdate()) +1, 0)) as last