【问题标题】:How can I give rank to dates?我怎样才能给日期排名?
【发布时间】:2025-12-15 01:05:02
【问题描述】:

我有一个带有USER_IDORDER_DATE 的订单表
我想实现这样的目标:

SELECT [USER_ID], [FIRST_ORDER_DATE], [SECOND_ORDER_DATE], 
       [THIRD_ORDER_DATE], [FOURTH_ORDER_DATE]
FROM ORDERS 

我尝试创建一个标量函数 (getFirstOrder, getSecondOrder, ...) 但是在第三次之后它非常慢

有什么想法吗?

谢谢!

【问题讨论】:

标签: sql ranking rank


【解决方案1】:

类似这样的:

select user_id, 
       max(case when rnk = 1 then date_col else null end) as first_order_date,
       max(case when rnk = 2 then date_col else null end) as second_order_date,
       max(case when rnk = 3 then date_col else null end) as third_order_date
from (
     select user_id, 
            date_col,
            dense_rank() over (partition by user_id order by date_col) as rnk
     from orders
) t
group by user_id;

您没有指定您的 DBMS。以上是适用于大多数现代 DBMS 的 ANSI SQL。

【讨论】: