create table pay_item 
(username varchar2(2),itemname varchar2(20),allprice int,buytime date);insert into pay_item values('A','王老吉',5,to_date('2005/01/02   08:00:01','yyyy/mm/dd   hh24:mi:ss'));
insert into pay_item values('A','可乐',3,to_date('2005/01/02   08:00:01','yyyy/mm/dd   hh24:mi:ss'));
insert into pay_item values('B','雪碧',3,to_date('2005/01/02   08:00:02','yyyy/mm/dd   hh24:mi:ss'));
insert into pay_item values('B','可乐',6,to_date('2005/01/02   08:00:02','yyyy/mm/dd   hh24:mi:ss'));
insert into pay_item values('A','王老吉',5,to_date('2005/01/02   08:00:03','yyyy/mm/dd   hh24:mi:ss'));想得到的结果是
A  王老吉 5 1
A  可乐   3 1
B  雪碧   3 2
B  可乐   3 2
A  王老吉 5 3就是加上一个订单号,相同用户的订单号相同,如果后面他又买东西了,算做另外一个订单,不知道排名函数怎么用~

解决方案 »

  1.   

    select p.username,p.itemname,p.allprice,row_number() over (partition by p.itemname order by p.rn)  rnt
    from (select t.* ,rownum as rn from pay_item t) p
    order by p.rn
    结果:
    USERNAME ITEMNAME ALLPRICE RNT
    A 王老吉 5 1
    A 可乐 3 1
    B 雪碧 3 1
    B 可乐 6 2
    A 王老吉 5 2
      

  2.   

    USERNAME ITEMNAME ALLPRICE BUYTIME
    A 王老吉 5 2005-01-02 08:00:01
    A 可乐 3 2005-01-02 08:00:01
    B 雪碧 3 2005-01-02 08:00:02
    B 可乐 6 2005-01-02 08:00:02
    A 王老吉 5 2005-01-02 08:00:03你按什么规则可以排除 最后一个是3?
      

  3.   

    select p.username,p.itemname,p.allprice,dense_rank() over ( order by p.buytime)  rnt
    from (select t.* ,rownum as rn from pay_item t) p
    order by p.rn
    USERNAME ITEMNAME ALLPRICE RNT
    A 王老吉 5 1
    A 可乐 3 1
    B 雪碧 3 2
    B 可乐 6 2
    A 王老吉 5 3晕倒,原来是直接按时间排列,昏死....
      

  4.   

    不只是时间。。是我用的例子里面条数太少了,不好意思。。更改一下再插条记录进去。insert into pay_item values('C','美年达',3,to_date('2005/01/02 08:00:01','yyyy/mm/dd hh24:mi:ss'));
    结果应为:
    USERNAME ITEMNAME ALLPRICE RNT
    A 王老吉 5 1
    A 可乐 3 1
    C 美年达 3 2
    B 雪碧 3 3
    B 可乐 6 3
    A 王老吉 5 4
      

  5.   

    SQL> select t.*, dense_rank() over(order by buytime, username)
      2    from pay_item t
      3  /
     
    USERNAME ITEMNAME                                            ALLPRICE BUYTIME     DENSE_RANK()OVER(ORDERBYBUYTIM
    -------- -------------------- --------------------------------------- ----------- ------------------------------
    A        王老吉                                                     5 2005/1/2 8:                              1
    A        可乐                                                       3 2005/1/2 8:                              1
    C        美年达                                                     3 2005/1/2 8:                              2
    B        可乐                                                       6 2005/1/2 8:                              3
    B        雪碧                                                       3 2005/1/2 8:                              3
    A        王老吉                                                     5 2005/1/2 8:                              4