【发布时间】:2014-07-08 03:36:00
【问题描述】:
下面的查询从Time_Stamp 列中获取最大日期作为来自Survey 的StartDate。为 EndDate 添加 90 天。然后通过在原始 EndDate 上添加更多,再创建 2 个间隔为 90 天的范围。
我试图让 StartDate 落在 Jan1st、April1st、July1st 或 Oct1 的 4 个桶内。如果 Max Time_Stamp 早于这些日期中的 1 个,那么这将是我的范围的第一个 StartDate ...因此对于下面的示例,最大 Time_Stamp 是 June4th,因此 StartDate 需要是 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
查询
WITH Start AS
(
SELECT
MAX(Time_Stamp) as StartDate,
DATEADD(day, 90, MAX(Time_Stamp)) as EndDate
FROM Survey
WHERE MainHospital = 'Hospital1'
),
Results AS
(
SELECT StartDate, EndDate from Start
UNION
SELECT DATEADD(DAY, 1, EndDate), DATEADD(day, 91, EndDate) FROM Start
UNION
SELECT DATEADD(DAY, 92, EndDate), DATEADD(day, 182, EndDate) FROM Start
)
SELECT LEFT(StartDate,11) AS StartDate, LEFT(EndDate,11) AS EndDate FROM Results
只是一个更新,这为我提供了第一个 StartDate 所需的内容...
--Return first day of next quarter
SELECT DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0)
FROM Survey
WHERE MainHospital = 'Hospital1'
【问题讨论】:
-
可能包括类似
DATENAME(Quarter, CAST(CONVERT(VARCHAR(8), Time_Stamp) AS DATETIME))
标签: sql-server