[SQL ] cte 遞迴
資料庫名稱: 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
02/21 19:02, 3F
※ 編輯: bernachom (61.231.18.92), 02/21/2016 19:56:54
討論串 (同標題文章)
Database 近期熱門文章
PTT數位生活區 即時熱門文章