У меня есть 3 просмотра:
v_sessions, v_clickouts и v_sales
Я пытаюсь объединить все в одно представление на основе этих правил:
- v_session .session_id = v_clickouts.clickout_id
- v_clickouts.clickout_id = v_sales.clickout_id
Я могу сделать это, используя 'LEFT JOIN':
LEFT JOIN v_clickouts clickouts ON
sessions.session_id = clickouts.session_id
AND sessions.user_id = clickouts.user_id
AND sessions.click_type = clickouts.click_type
AND sessions.click_id = clickouts.click_id
AND sessions.cid = clickouts.cid
AND sessions.project::text = clickouts.project::text
AND sessions.event_time::date <= clickouts.event_time::date
LEFT JOIN v_sales sales ON
clickouts.clickout_id = sales.clickout_id
AND sessions.user_id = sales.user_id
AND clickouts.project::text = sales.project::text
AND clickouts.event_time::date <= sales.event_time::date
;
By Имея дополнительные условия «И», я теряю данные с правой стороны из-за несоответствия некоторых условий. Я хочу оставить только два условия:
LEFT JOIN v_clickouts clickouts ON
sessions.session_id = clickouts.session_id
LEFT JOIN v_sales sales ON
clickouts.clickout_id = sales.clickout_id
;
И переместить все условия «И» в оператор «CASE», который создаст новый столбец для каждого «И», чтобы представление могло иметь дополнительные такие столбцы, как:
session_user_id_equals_clickouts_user_id session_click_type_equals_clickouts_click_type clickouts_event_time_is_less_than_sales_event_time
TRUE TRUE TRUE
FALSE TRUE FALSE
TRUE TRUE FALSE
Я не знаю, как я смог бы добиться этого, используя метод 'CASE'.
Спасибо за ваши предложения.
РЕДАКТИРОВАТЬ
Пример данных - я получаю их после первого объединения v_sessions и v_clickouts:
session_event_time session_id user_id cid click_type_from_session click_id clickout_event_time click_type_from_session clickout_id
2019-12-18 11:21 id_1 user_id_1 cid_1 type_1 click_id_1 2019-12-18 11:21 type_1 clickout_id_1
2019-12-18 18:35 id_2 user_id_2 cid_2 type_1 click_id_2 2019-12-18 18:38 type_1 clickout_id_2
Эти два представления объединяются только с помощью session_id
, я хочу иметь метод CASE
, чтобы определить, например:
sessions.click_type = clickouts.click_type as 1
sessions.click_id = clickouts.click_id as 2
sessions.cid = clickouts.cid as 3
sessions.project::text = clickouts.project::text as 4
И это приведет к наличию 4 дополнительных столбцов в окончательном виде вот так (я назвал новые столбцы 1, 2, 3, 4 для более коротких имен):
session_event_time session_id user_id cid click_type_from_session click_id clickout_event_time click_type_from_session clickout_id 1 2 3 4
2019-12-18 11:21 id_1 user_id_1 cid_1 type_1 click_id_1 2019-12-18 11:21 type_1 clickout_id_1 TRUE FALSE TRUE TRUE
2019-12-18 18:35 id_2 user_id_2 cid_2 type_1 click_id_2 2019-12-18 18:38 type_1 clickout_id_2 FALSE TRUE TRUE FALSE
Поскольку я не отображаю все параметры, которые проверяю условия для меня нужны только столбцы с указанием TRUE
или FALSE
.