[SQL ] cte 遞迴

看板Database (資料庫)作者 (Terry)時間8年前 (2016/02/21 10:30), 8年前編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/2 (看更多)
資料庫名稱: sql server 2008 r2 資料庫版本: 2008 r2 內容/問題描述: 請教一下, 我有一個table是長這個樣子 useriD uID tDate startDate endDate seqNo AAAA ZZ 2016-02-21 NULL NULL 1 BBBB ZZ 2016-02-25 NULL NULL 2 CCCC VV 2016-02-25 NULL NULL 3 我希望整理後最後的結果是 userID uID tDate startDate endDate seqNo AAAA ZZ 2016-02-21 2016-02-21 2016-02-25 1 BBBB ZZ 2016-02-25 2016-02-25 NULL 2 CCCC VV 2016-02-25 2016-02-25 NULL 3 uID 、 userID、tDate 為key值 我要找出每一個uID的有效區間 (startDate, endDate) 如果uID只有一筆的時後,他就還沒有結束 endDate 就會是null 如果uid有兩筆以上的時後,次筆的tDate(產生uid時間),就會更新到目前這一筆的endDate 我用cte去跑,結果一直超出100筆 不知道是什麼條件沒有下好.. 希望前輩能教導一下 然後我發燒了,好難過...唉,希望今天會好轉.. [更新] (今天什麼事都做不了,燒得好厲害呀,唉...現在也還在咳) 剛才我用了簡單的更新就做完了,我搞得太複雜了 --排序 SELECT ROW_NUMBER() OVER(ORDER BY id,aa) AS ROWID, * INTO #TEMP FROM [資料來源] ORDER BY userid,id,aa --更新 UPDATE T SET T.enddate=OT.startdate FROM #TEMP AS T LEFT JOIN #TEMP AS OT on T.ROWID=OT.ROWID-1 AND T.ID=OT.ID --結果 SELECT * FROM #TEMP --刪除 DROP TABLE #TEMP -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.18.92 ※ 編輯: bernachom (61.231.18.92), 02/21/2016 10:31:03

02/21 14:33, , 1F
我是在想,如果要更新時間區間,在程式端做會不會比較
02/21 14:33, 1F

02/21 14:33, , 2F
好呢??
02/21 14:33, 2F

02/21 19:02, , 3F
CTE好像沒有什麼機會的樣子,我看看XML行不行...
02/21 19:02, 3F
※ 編輯: bernachom (61.231.18.92), 02/21/2016 19:56:54
文章代碼(AID): #1MoI56S4 (Database)
討論串 (同標題文章)
文章代碼(AID): #1MoI56S4 (Database)