`
zhangyou1010
  • 浏览: 299917 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle sql row_number 排序后分组处理

阅读更多
表结构:
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


分享到:
评论
Global site tag (gtag.js) - Google Analytics