[SQL ] 時間RowData轉甘特圖

作者: carsun00 (永夜)   2019-05-17 23:57:05
資料庫名稱:SQL Server 2017
資料庫版本:14.0.2002.14
內容/問題描述:
資料來源是狀態&Time的資料表
需要轉換成開始與結束的資料格式
同時可能會有多筆開始多筆結束
要取出最早時間與最晚時間
是有想出一個堪用的語法...
但是想知道有沒有比較好的做法..
資料如下
User SEQ Time
AA 1 2019-05-10 09:00:00.000
AA 1 2019-05-10 20:00:00.000
AA 2 2019-05-11 10:00:00.000
AA 2 2019-05-11 20:00:00.000
人| Seq|開始 | 結束
AA| 1 |2019-05-10 09:00:00.000 | 2019-05-11 10:00:00.000
AA| 2 |2019-05-11 10:00:00.000 | 現在時間
seq2的起始時間要當作 seq1的結束時間。
沒有下一筆資料,抓現在GetDate()
SQL語法如下
SELECT
StartData.[User]
, StartData.[Start_Date_Time]
, EndData.[End_Date_Time]
FROM
( SELECT
ROW_NUMBER() OVER(PARTITION BY [User] ORDER BY
CONVERT(VARCHAR(20), [Time], 111)) AS Num
, 1 + ROW_NUMBER() OVER(PARTITION BY [User] ORDER BY
CONVERT(VARCHAR(20), [Time], 111)) AS Num2
, [User]
, CONVERT(VARCHAR(20), [Time], 111) AS [Start_Date_Time]
FROM
[TEST]
GROUP BY
[User]
, CONVERT(VARCHAR(20), [Time], 111)
) AS StartData
LEFT JOIN
( SELECT
ROW_NUMBER() OVER(PARTITION BY [User] ORDER BY
CONVERT(VARCHAR(20), [Time], 111)) AS Num3
, [User], CONVERT(VARCHAR(20), [Time], 111) AS [End_Date_Time]
FROM
[TEST]
GROUP BY
[User]
, CONVERT(VARCHAR(20), [Time], 111)
) AS EndData
ON StartData.[User] = EndData.[User]
AND StartData.Num2 = EndData.Num3

Links booklink

Contact Us: admin [ a t ] ucptt.com