在Presto中按最短时间戳加入

时间:2018-11-12 02:09:58

标签: sql presto

我在Presto中有两个大表-callsmobile_updates。每个mobile_id都有多个更新,每个更新都有一个新软件version。 每个呼叫都是在固定的时间戳记call_started进行的。

我的目标是将created_at中最接近(先前)的mobile_updates时间戳与拨打电话的时间相结合,并按mobile_id加入version处在Presto拨打电话的时间。结果应为两列:call_startedversion

由于某些原因,现有代码无法产生预期的结果-它仅返回每个mobile_id的最新调用,而应该有多个调用。

Presto不支持子查询,因此这就是必须使用分区的原因。有什么事吗

with calls as (

SELECT  
      call_started
    , mobile_id
from calls
)

, ranking as (
select 
    mu.mobile_id
    , mu.version
    , mu.created_at
    , c.call_started
    , rank() over (partition by mu.mobile_id order by mu.created_at desc) as rank 

from mobile_updates mu
join calls c
    on mu.mobile_id = c.mobile_id 
where mu.created_at < c.call_started
) 

select 
    call_started
    ,version
from ranking 
where rank = 1

0 个答案:

没有答案