欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle sql row_number 排序后分组处理

程序员文章站 2022-03-06 18:21:04
...
表结构:
create table post(group_id number , ctime date);

数据:
           GROUP_ID        CTIME
1        2641        2010-10-11 上午 11:33:41
2        2644        2010-10-11 上午 11:31:38
3        2641        2010-10-11 上午 11:25:29
4        2921        2010-8-27 下午 04:00:33
5        2921        2010-8-27 下午 03:19:10
6        2721        2010-7-30 下午 04:36:08
7        2721        2010-7-30 下午 04:35:53
8        2821        2010-7-30 下午 04:20:40
9        2644        2010-7-30 下午 04:17:24
10        2721        2010-6-22 下午 03:42:38
11        5721        2010-6-22 下午 01:59:41
12        3721        2010-6-17 下午 01:26:40
13        1721        2010-6-17 下午 01:02:42
14        6721        2010-6-17 下午 01:02:37
15        2721        2010-6-17 下午 01:02:30
16        2721        2010-6-17 下午 01:00:39
17        2721        2010-6-17 下午 01:00:24
18        2721        2010-6-17 下午 12:59:28
19        2721        2010-6-17 下午 12:59:22
20        2721        2010-6-17 下午 12:59:14


要根据ctime排倒序,求group_id排前10的数据,group_id不能有重复的,也就是说,第一条

数据和第三条数据的group_id相同,但只要取第一条,时间在前面的那条,用普通的排序,分

组,去重复没有解决,用分析函数解决了.
select *
  from (select t.group_id, t.ctime
          from (select group_id,
                       ctime,
                       row_number() over(partition by group_id order by ctime desc) aaa
                  from MOKA_GROUP_POST) t
         where t.aaa = 1
         order by ctime desc) b
 where rownum < 11