Свернуть разреженный стол в Vertica
Я использую Vertica.
Проблема: у меня есть разреженная таблица (user_session_tmp2). Строка содержит session_token и список (около 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, ... );
К сожалению, в запросе на обновление нельзя использовать выражение регистра.
1 ответ
Решение
Не могли бы вы попробовать следующее решение:
select session_token, max(col1), max(col2),.., max(colN)
from user_session
group by session_token