在同一 table 的开始日期和结束日期到达不同用户 ID 的多个订单
Arrive at start date and end date with in the same table with multiple orders across different user id's
我有两个表,一个有唯一 ID 和一个时间戳,告诉用户什么时候第一次进入商店,另一个有唯一 ID 时间戳和每个唯一 ID 下的订单列表,它们的排名由唯一分区id 和 ordered by the orders placed to rank the orders placed.
现在我需要一个输出,其中我将具有唯一 ID 订单号和具有两个新列的开始时间和结束时间的排名,其中开始时间将是第一次,以防订单排名为 1,结束时间将为是下订单的时间,对于排名 2,开始时间将是第一个订单的时间,结束时间将是第二个订单的时间,依此类推。
下表供参考
Table 1
Table 2
决赛Table
非常感谢任何意见。提前致谢
您可以通过自连接来做到这一点:
select
t2.id,
t2.order_id,
t2.order_rank,
coalesce(t11.order_time, t2.order_time) start_time,
t1.order_time end_tume
from table1 t1
inner join table2 t2
on t2.id = t1.id
left join (select distinct order_time, order_rank, id from table1) t11
on t11.id = t1.id and t11.order_rank = t1.order_rank - 1
left join
尝试使 "previous" 记录的订购时间与 id
相同。如果它不可用,我们将返回 table2
.
的日期
您可以为此使用 window 函数:
select t2.id, t2.order_id, t2.order_rank, t2.order_time as end_time,
coalesce(max(t2.order_time) over (partition by t2.id
order by t2.order_time
range between unbounded preceding and 1 second preceding
), t1.first_visit
) as start_time
from t2 left join
t1
on t2.id = t1.id;
我不确定这是否比自 join
版本快。
我有两个表,一个有唯一 ID 和一个时间戳,告诉用户什么时候第一次进入商店,另一个有唯一 ID 时间戳和每个唯一 ID 下的订单列表,它们的排名由唯一分区id 和 ordered by the orders placed to rank the orders placed.
现在我需要一个输出,其中我将具有唯一 ID 订单号和具有两个新列的开始时间和结束时间的排名,其中开始时间将是第一次,以防订单排名为 1,结束时间将为是下订单的时间,对于排名 2,开始时间将是第一个订单的时间,结束时间将是第二个订单的时间,依此类推。
下表供参考
Table 1
Table 2
决赛Table
非常感谢任何意见。提前致谢
您可以通过自连接来做到这一点:
select
t2.id,
t2.order_id,
t2.order_rank,
coalesce(t11.order_time, t2.order_time) start_time,
t1.order_time end_tume
from table1 t1
inner join table2 t2
on t2.id = t1.id
left join (select distinct order_time, order_rank, id from table1) t11
on t11.id = t1.id and t11.order_rank = t1.order_rank - 1
left join
尝试使 "previous" 记录的订购时间与 id
相同。如果它不可用,我们将返回 table2
.
您可以为此使用 window 函数:
select t2.id, t2.order_id, t2.order_rank, t2.order_time as end_time,
coalesce(max(t2.order_time) over (partition by t2.id
order by t2.order_time
range between unbounded preceding and 1 second preceding
), t1.first_visit
) as start_time
from t2 left join
t1
on t2.id = t1.id;
我不确定这是否比自 join
版本快。