Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何给日期排名?_Sql_Ranking_Rank - Fatal编程技术网

Sql 我如何给日期排名?

Sql 我如何给日期排名?,sql,ranking,rank,Sql,Ranking,Rank,我有一个带有用户ID和订单日期的订单表 我想实现这样的目标: SELECT [USER_ID], [FIRST_ORDER_DATE], [SECOND_ORDER_DATE], [THIRD_ORDER_DATE], [FOURTH_ORDER_DATE] FROM ORDERS 我试图创建一个标量函数(getFirstOrder,getSecondOrder,…) 但在第三次之后,速度非常慢 有什么想法吗 谢谢 类似这样: select user_id,

我有一个带有
用户ID
订单日期的订单表

我想实现这样的目标:

SELECT [USER_ID], [FIRST_ORDER_DATE], [SECOND_ORDER_DATE], 
       [THIRD_ORDER_DATE], [FOURTH_ORDER_DATE]
FROM ORDERS 
我试图创建一个标量函数(
getFirstOrder
getSecondOrder
,…) 但在第三次之后,速度非常慢

有什么想法吗

谢谢

类似这样:

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。

这可能会有所帮助: