我使用的是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表达式。
答案 0 :(得分:1)
您可以尝试以下解决方案:
select session_token, max(col1), max(col2),.., max(colN)
from user_session
group by session_token