close

有時候在資料設計上會有 主檔 與 紀錄檔,來進行關聯與紀錄
但取得資料時,只想要取得最新一筆,( 或依照我們所要的排序條件取得最新或最舊 )
但又不想在程式上處理,希望直接用SQL取得 就可以運用 ROW_NUMBER() 與PARTITION BY

標準的紀錄Table會如下
0001.png

這時候可以使用 ROW_NUMBER()  並且 以"時間"欄位排序,替資料編號
0002.png
但這樣只會把所有資料都加上編號 並命名為sn 欄位,且全部依照時間從最新排序到最舊


如果不想要使用GROUP BY 跟MAX,那可以嘗試使用 PARTITION BY配合ROW_NUMBER()  來為資料做群組與編號
PARTITION BY '要群組的欄位名稱' 
這時候就會依照我們要群組的欄位"訂單",針對同一群組進行編號
這樣就會依照不同訂單,進行重新編號
0004.png


然後再對結果重新SELECT 並指定 sn值為 1 就可以取得 我們要的最新資料

0003.png

要注意的是 ROW_NUMBER() 的編號是從1開始

arrow
arrow
    全站熱搜

    ADOLPH 發表在 痞客邦 留言(0) 人氣()