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