SQL一對多取子表最新記錄的所有字段(ROW_NUMBER()OVER()函數的應用)
阿新 • • 發佈:2017-12-08
可選 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()函數的應用)