2012年8月22日 星期三

選取前n筆資料

是說PL/SQL要做到此功能需要用到 row_number 的功能,MS SQL則是使用TOP比較簡單(嗎?)
今天試用了一下發現怎麼叫都叫不出來

想到之前用teradata的經驗是,一定要取別名!!!
不取別名好像就不是個資料表一樣!!

PL/SQL就沒這麼龜毛,心想該不會MS SQL也在這種奇怪的地方有所堅持吧..

一試之下果然要取別名,這死孩子!

參考網址參考網址

簡單來說如果要取一大包查詢裡面的前100個,大致語句是這樣


SELECT TOP 100 * FROM (

--不管多複雜的SQL都可以丟這裡

 ) AS A


中間是什麼不是挺重要的,反正就是到處join出來的一個資料表
重點是最後要加別名


另外附上PL/SQL的取前100個寫法

SELECT AA,BB,CC FROM 

  SELECT AA,
                 BB,
                CC,
                row_number() over(PARTITION BY AA, BB,CC ORDER BY  CC desc) RN
)
WHERE RN <101

這種寫法會將AA,BB,CC三個欄位選出來,又不會把序號也印出來
至於怎麼編列序號,取決於(PARTITION BY AA, BB,CC ORDER BY  CC desc這行
是指以AA,BB,CC為群組,以CC當排序列

這邊可以有比較進階的用法,例如某一筆資料有10個存取紀錄,可以取出最新一筆之類的
詳細要怎麼寫還是要看需求~

有問題可以留言問喔~
一樣要全文轉載請留個言跟我講一下..
我超想被留言鼓勵的


沒有留言:

張貼留言