2014-09-02 39 views
1

我正在使用vertica。在Vertica中卷起稀疏表格

问题: 我有稀疏表(user_session_tmp2)。行包含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, ...); 

不幸的是,它是不允许使用在更新的情况下表达查询。

+0

'MERGE'是不是最好的方法。你能否更新你的问题,并添加一个小样本数据集和所需的结果? – Kermit 2014-09-02 17:53:09

回答

1

你能尝试以下解决方案:

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

谢谢,它的工作原理 – Natalia 2014-09-03 06:51:11