Oracle SQL中的日期排名函数

时间:2015-10-29 20:48:02

标签: sql oracle rank window-functions

我有以下代码:

SELECT id, order_day, purchase_id FROM d

customer_idpurchase_id是唯一的。每个customer_id可以有多个purchase_id。假设每个人至少订购了5个订单。

现在,我只想提取每个客户ID 的前5个购买ID(这取决于最早的购买日期)。我希望结果看起来像这样:

 id | purchase_id | rank
-------------------------
  A |  WERFEW43   |  1
  A |  ERTGDSFV   |  3
  A |  FDGRT45    |  2
  A |  BRTE4TEW   |  4
  A |  DFGDV      |  5
  B |  DSFSF      |  1
  B |  CF345      |  2
  B |  SDFSDFSDFS |  4

我想到排名order_day,但我的知识还不足以解决这个问题。

2 个答案:

答案 0 :(得分:1)

select id,purchase_id, rank() over (order by order_day)
from d

您还可以尝试dense_rank() over (order by order_day)row_number() over (order by order_day)并选择哪一种更适合您

答案 1 :(得分:1)

select *
from
 ( SELECT
      id
     ,order_day
     ,purchase_id
     ,row_number()                    -- ranking
      over (partition by id           -- each customer
            order by order_day) as rn -- based on oldest dates
   FROM d
 ) as dt
where rn <= 5