[SQL ] 時間RowData轉甘特圖

看板Database (資料庫)作者 (永夜)時間5年前 (2019/05/17 23:57), 5年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
資料庫名稱: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
文章代碼(AID): #1StjdJ49 (Database)
文章代碼(AID): #1StjdJ49 (Database)