我有以下代码:
SELECT id, order_day, purchase_id FROM d
customer_id
和purchase_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
,但我的知识还不足以解决这个问题。
答案 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