SQL一对多取子表最新记录的所有字段(ROW_NUMBER()OVER()函数的应用)
2017-12-08 17:16
621 查看
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
结果:
当然,这个函数也可以用于去重和分页,上面只是一个我开发中遇到的实际需要查询的数据
参数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
结果:
当然,这个函数也可以用于去重和分页,上面只是一个我开发中遇到的实际需要查询的数据
相关文章推荐
- oracle利用分析函数row_number()over()查询一张表所有字段并按照其中部分字段分组查询某字段最大值
- 使用Oracle的row_number() over函数过滤重复数据,取最新的记录
- oracle中,分组后,取各组的前n条记录的sql语句:rownumber() over()
- SQL中分析函数ROW_NUMBER() OVER(PARTITION BY GRADEOBJECTID ORDER BY BG.GRADEDATE DESC)的用法!!!
- sql 排序 ROW_NUMBER() OVER 函数
- SQL ROW_NUMBER() OVER函数的基本用法用法
- 利用Oracle的row_number() over函数消除重复的记录
- sql中函数over()和row_number()的用法
- SQL 函数之 row_number() over()
- sql "ROW_NUMBER() OVER()"函数,编号,分组,分页
- oracle中,分组后,取各组的前n条记录的sql语句:rownumber() over()
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较 SQl 序号 字段 同列
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数
- sql开窗函数 row_number () over(order by id )
- oracle中,分组后,取各组的前n条记录的sql语句:rownumber() over()
- SQL ROW_NUMBER() OVER函数的基本用法用法
- 利用Oracle的row_number() over函数消除重复的记录
- SQL关于分页的sql查询语句 limit 和row_number() OVER函数
- sql2005 应用ROW_NUMBER() OVER(PARTITION BY 列A ORDER BY 列B )