2 rp1qfd rp1qfd 于 2015.07.16 14:43 提问

ORACLE怎么写先排序后分组的前5位

select *
from (select a.*,
row_number() over(partition by ordered order by cdate desc) px
from (select a.*, b.user_name username
from view_hjzx a, gjjx.sys_users b
where a.userid = b.userid(+)
and a.HANDSET like '%15901054535%') a)
where px <= 5 order by cdate desc
数据是好几种分类,标识是ORDERED,然后我想达到的目的是,最大的日期的ORDERED作为一组,显示前五条,然后按日期排序,第二大的ORDERED前五条,第三大的前五条,日期带领5条组号,不知道怎么写,目前的写法有个问题就是后排序,假设第二组有个日期大于第一组他会跑上去,很苦恼
604790441欢迎指导

2个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2015.07.16 15:09
已采纳
    select *
    from (select a.*,
    row_number() over(partition by ordered order by cdate desc) px,
    FIRST_VALUE(cdate) OVER (partition by ordered order by cdate desc
                             ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
                            ) ordered_date
    from (select a.*, b.user_name username
    from view_hjzx a, gjjx.sys_users b
    where a.userid = b.userid(+)
    and a.HANDSET like '%15901054535%') a)
    where px <= 5
    order by ordered_date DESC, ORDERED DESC, cdate desc
Tiger_Zhao
Tiger_Zhao   Rxr 2015.07.16 14:56
    where px <= 5 order by ORDERED DESC, cdate desc
rp1qfd
rp1qfd 以日期为导向的,先日期,后组,再5条
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ORACLE 先分组后排序,取出每一类的头几条数据
--先根据A进行分组,再在组内根据B进行排序。rn SELECT *   FROM (SELECT T.B,                T.A,                ROW_NUMBER() OVER(PARTITION BY T.A ORDER BY T.B DESC) RN           FROM DUAL T)  WHERE RN <= 3;
Oracle分组查询取每组排序后的前N条记录
项目中用到Oracle分组查询取每组排序后的前N条记录,group by 只能返回每个组的单条统计。所以用OVER(PARTITION BY)函数,具体详见baidu.com 建个测试表test_abc,如图: 要求查询出按B字段进行分组,每组取C值最大的前3位。 查询sql为 : select * from ( SELECT b,c,row_number() OVE
mysql 先排序后分组再排序查询数据
SELECT * FROM (SELECT * FROM table ORDER BY test DESC) AS a GROUP BY a.test1 ORDER BY a.test DESC;
Sql实现先排序后分组
这是我项目中用到的 表有几张 有点乱哈 大概就是这样 哈哈哈....... 如下是一个子查询 里面先排序 将结果集给一个别名user_satellite_info  在通过use_id排序 SELECT * from (  SELECT * FROM user_satellite_info where  user_id in (SELECT praise_user_id from
oracle 在分组内排序的方法
oracle分析函数十分强大,我们只要掌握这些方法,更直接的说法就是知道这些分析函数的作用就能完成很多工作。下边贴出这些函数,及简单应用。其中我想对lag()和lead()函数坐下说明:lag()本身是延后的意思也就是延后出现某列的数,而lead()有引领、领先的意思也就是提前几行显示某列数据RANK()dense_rank()【语法】RANK ( ) OVER ( [quer
Oracle 以某字段分组,以某字段排序,取前几条
 select * from (select 表.*, row_number() over(partition by 以此字段为分组  order by 以此字段排序 desc) rn from 表) where rn=1   --表示取第一个
Oracle 分组内排序 字段相同的排在一起显示
SELECT t.*,  RANK() OVER(PARTITION BY t.ukeysn  order by t.timecreate desc) RK                           FROM PMS_UKEYOPER t  where t.timecreate
mysql中的先排序后分组
今天同事翻看之前我写的sql时,问我我这个sql和他写的相比查询效率哪个更好。乍眼一看,竟然没看懂他写的sql,(⊙﹏⊙)b汗。仔细一看,还真是很巧妙,必须要研究研究! 所以便有了本篇内容:mysql如何先查询后分组(求每个分组的 top1)
先排序,再分组,再排序,再将组内元素合并
先排序再分组再排序,再进行组内排序
取出分组之后每组前10条数据 oracle
--取出x || '_' || y 分组之后每组前10条数据  select * from (        select  x,y,sj,ddbz,             row_number() over (partition by x || '_' || y order by sj desc) rn                 from test           wher