Re: [SQL ] 列出一個欄位中開始變化的前後值
老實說 這個需求不算難 但是你指定的輸出格式並不佳
大幅提升了計算難度
理想的輸出最好是
同一個人在"同一行"內用多個欄位來表示UNIT的差異 而不是用"多行"顯示
SELECT a.*
FROM table AS a
LEFT JOIN table b ON a.id=b.id && a.year=b.year-1 && a.unit<>b.unit
LEFT JOIN table c ON a.id=c.id && a.year=c.year+1 && a.unit<>c.unit
WHERE a.id IN(SELECT id FROM table GROUP BY id HAVING COUNT(DISTINCT unit) >1)
##先取有換單位的人
&& (b.id IS NOT NULL || c.id IS NOT NULL)
ORDER BY a.id, a.year DESC
這還不是最好的算式 但是夠快了 簡短比較重要
a.id IN() 是用來加速的 實際上可以完全不用
缺點是年份要相連 否則抓不到
也有年分不用相連的方法 但是又會更複雜
※ 引述《Schematic (小小寶的媽)》之銘言:
: 資料庫名稱:SQL SERVER
: 資料庫版本:2012
: 內容/問題描述:
: 列出某位員工在哪一年換了單位,沒有換單位的員工不用列出
: Num id year unit
: --------------------------
: 1 1 99 A
: 2 1 98 B
: 3 1 97 B
: 4 1 96 B
: 1 2 99 B
: 2 2 98 B
: 3 2 97 B
: 1 3 97 C
: 2 3 96 C
: 3 3 95 C
: 4 3 94 B
: 1 4 97 A
: 2 4 96 B
: 3 4 95 B
: 預期結果,員工1在99年從B單位換到A單位
: id year unit
: -----------------------
: 1 99 A
: 1 98 B
: 3 95 C
: 3 94 B
: 4 97 A
: 4 96 B
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.72.102
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1461946770.A.BDA.html
※ 編輯: JeremyJoung (118.163.72.102), 04/30/2016 00:23:44
討論串 (同標題文章)
Database 近期熱門文章
PTT數位生活區 即時熱門文章