Oracle SQL中日期的排名函数
Posted
技术标签:
【中文标题】Oracle SQL中日期的排名函数【英文标题】:Rank function for date in Oracle SQL 【发布时间】:2015-10-29 20:48:02 【问题描述】:例如,我有以下代码:
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
,但我的知识还不够好,无法完成。
【问题讨论】:
【参考方案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)
,选择更适合您的一种
【讨论】:
这不起作用。仅按天返回 5 个订单,而不是按 id。 @VDLover (partition by id order by order_day)
会有所帮助。要只返回 5 行,您应该添加 WHERE
条件。见@dnoeth 答案【参考方案2】:
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
【讨论】:
以上是关于Oracle SQL中日期的排名函数的主要内容,如果未能解决你的问题,请参考以下文章