1. 程式人生 > >SQL一對多取子表最新記錄的所有字段(ROW_NUMBER()OVER()函數的應用)

SQL一對多取子表最新記錄的所有字段(ROW_NUMBER()OVER()函數的應用)

可選 alt select color es2017 apply 根據 實際應用 wid

ROW_NUMBER()OVER()

參數1:分組字段 PARTITION BY ..,..,.... 可選

參數2:排序字段 ORDER BY .. DESC 必須

實例:

根據ConfirmDate 排序,PayApplyId 分組

SELECT * FROM PayApplyConfirmRecord
SELECT ROW_NUMBER()OVER(PARTITION BY PayApplyId ORDER BY ConfirmDate DESC) rowId,* from dbo.PayApplyConfirmRecord

結果:

技術分享圖片

實際應用場景

支付申請表PayApply關聯審核表PayApplyConfirmRecord 關系為一對多,查詢所有支付申請記錄以及最新的審核記錄

SELECT b.*,a.* FROM dbo.PayApply a
LEFT JOIN ( select * from (select ROW_NUMBER()over(PARTITION BY PayApplyId order by ConfirmDate desc) rowId,* from dbo.PayApplyConfirmRecord)a where a.rowId=1 ) b ON a.Id=b.PayApplyId

結果:

技術分享圖片

當然,這個函數也可以用於去重和分頁,上面只是一個我開發中遇到的實際需要查詢的數據

SQL一對多取子表最新記錄的所有字段(ROW_NUMBER()OVER()函數的應用)