在vertica中卷起稀疏表

时间:2014-09-02 15:43:32

标签: sql vertica

我使用的是vertica。

问题: 我有稀疏表(user_session_tmp2)。 Row包含session_token和params的列表(大约15个字段)。几行可以描述一个session_token。我需要获取表,其中只有一行描述一个会话(即合并一行中一个会话的所有数据)

明显的解决方案是:

merge /*+ direct */ into user_session tgt using user_session_tmp2 src on src.session_token=tgt.session_token 
when matched then 
    update set time = (case when src.time> tgt.time then tgt.time else src.time)
               device_id = (case when src.device_id is not null then src.device_id else tgt.device_id) 
when not matched then 
    insert values(src.session_token, src.user_id, src.time, src.client_time, src.device_id, src.app_version, ... );

不幸的是,它不允许在更新查询中使用case表达式。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下解决方案:

    select session_token, max(col1), max(col2),.., max(colN) 
      from user_session
  group by session_token