[SQL ] 時間RowData轉甘特圖
資料庫名稱: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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.185.97
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1558108627.A.109.html
※ 編輯: carsun00 (111.82.151.25), 05/18/2019 11:59:23
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章