首页 > 其他 > 详细

partition by 函数

时间:2016-11-02 20:48:19      阅读:211      评论:0      收藏:0      [点我收藏+]
工作中用到的sql

select t."ID", t."TITLE", t."SENDUSERID", t."SENDTIME", t."URL", t."USERID", t."TODOTYPE", t."MODELNAME", t."IMPORTANCE", t."SENDUSERNAME", t."SENDUSERDEPTNAME", t.DATAID, t.OPENFLAG, t.realuserid, t.status, t.donetime from (select m."ID", m."TITLE", m."SENDUSERID", m."SENDTIME", m."URL", m."USERID", m."TODOTYPE", m."MODELNAME", m."IMPORTANCE", m."SENDUSERNAME", m."SENDUSERDEPTNAME", m.DATAID, m.OPENFLAG, m.realuserid, m.status, m.donetime , row_number() over(partition by m.DATAID,m.status,m.realuserid order by m."SENDTIME" desc) rn from ( select a."ID", a."TITLE", a."SENDUSERID", a."SENDTIME", a."URL", a."USERID", a."TODOTYPE", a."MODELNAME", a."IMPORTANCE", a."SENDUSERNAME", a."SENDUSERDEPTNAME", a.DATAID, b.OPENFLAG, b.userid as realuserid, b.status, b.donetime from TD_HORIZON_Info a, TD_HORIZON_User b where a.id = b.TODOID ) m )t where rn=1;

 

 

Parttion by 关键字是Oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,聚合函数一般只有一条反映统计值的结果

  场景:查询出每个部门工资最低的员工编号【每个部门可能有两个最低的工资员工】

--row_number() 顺序排序 select row_number() over(partition by deptid order by salary) my_rank ,deptid,USERID,salary from tsaler; --rank() (跳跃排序,如果有两个第一级别时,接下来是第三级别) select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; --dense_rank()(连续排序,如果有两个第一级别时,接下来是第二级) select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler; -------方案3解决方案 select * from (select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1; select * from (select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1;

 

partition by 函数

原文:http://www.cnblogs.com/zhouyanan/p/6024072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!