代码之家  ›  专栏  ›  技术社区  ›  the_darkside

通过PrestoDB中最近的时间戳连接

  •  0
  • the_darkside  · 技术社区  · 6 年前

    我有两张大桌子- calls mobile_updates . 每个 mobile_id version . 每次通话都有固定的时间戳 call_started

    我的目标是通过最接近的人(前一个)加入这两个组织 created_at 手机更新 移动电话号码 为了得到 在普雷斯托打电话的时候。结果应该是两列: 呼叫已开始

    由于某些原因,现有的代码并没有产生所需的结果-它只为每个结果返回最近的调用 移动电话号码

    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 回复  |  直到 5 年前