我在Presto中有两个大表-calls
和mobile_updates
。每个mobile_id
都有多个更新,每个更新都有一个新软件version
。
每个呼叫都是在固定的时间戳记call_started
进行的。
我的目标是将created_at
中最接近(先前)的mobile_updates
时间戳与拨打电话的时间相结合,并按mobile_id
加入version
处在Presto拨打电话的时间。结果应为两列:call_started
和version
由于某些原因,现有代码无法产生预期的结果-它仅返回每个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