Присоединение по ближайшей отметке времени в Престо - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть два больших стола в 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
...