2014-07-07 133 views
0

創建日期範圍下面的查詢將第Time_Stamp列的最大日期作爲從Survey開始日期。爲EndDate添加90天。然後通過向原始EndDate添加更多內容,以90天的間隔創建2個更多範圍。從時間戳

我試圖讓StartDate落入Jan1st,April1st,July1st或Oct1的4個桶內。如果Max Time_Stamp在這些日期之前1,那麼這將是我的範圍的第一個StartDate ...因此,對於我下面的示例,最大Time_Stamp是6月4日,所以StartDate需要7月1日。這是可以在SQL服務器內?

TIME_STAMP爲Hospital1

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 

只是一個更新,這給了我什麼,我需要爲第一起始日期...

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

可能包括這樣的事'DATENAME(區,CAST(CONVERT(VARCHAR(8),TIME_STAMP) AS DATETIME))' – user3749447

回答

0

看來你只是想計算你的約會季度,我是否正確?

如果是的話,你可以用:

SELECT DATENAME(Quarter, CAST(CONVERT(VARCHAR(8), GETDATE()) AS DATETIME)) as Quarter 
+0

是的!只是發現,不知道如何將它包含在我的查詢中,因爲我正在創建90天的時間間隔。 – user3749447

+0

那麼你還在尋找該季度的開始和結束日期? – Limey

+0

是的,選擇Time_Stamp的TOP 1 MAX,確定哪個季度是該日期的下一個(不是當前),並且將其作爲第一個StartDate在我的查詢中添加了幾天來獲取間隔。 – user3749447

1
DECLARE @Year DATE = '2013-01-01' 
DECLARE @Quarter INT = 1; 

SELECT DATEADD(QUARTER, @Quarter - 1, @Year) , 
     DATEADD(DAY, -1, DATEADD(QUARTER, @Quarter, @Year)) 

您可以使用DATEPART(季度@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 
+0

這看起來很有用,但不知道如何將其納入我的查詢和我的列Time_Stamp – user3749447

0

計算宿舍的日期範圍:

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

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