看板 Database 關於我們 聯絡資訊
資料庫名稱: 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
bernachom: 我是在想,如果要更新時間區間,在程式端做會不會比較 02/21 14:33
bernachom: 好呢?? 02/21 14:33
bernachom: CTE好像沒有什麼機會的樣子,我看看XML行不行... 02/21 19:02
※ 編輯: bernachom (61.231.18.92), 02/21/2016 19:56:54