Как убрать дубликаты в select?
with
active_campaigns_with_settings as (
select
*
from campaigns as c
join campaigns_settings as cs on c.id = cs.campaign_id
where
date_part('hour', now()) between cs.worktime_from and cs.worktime_to and
c.is_active=true
),
active_campaigns_with_messages as (
select
acws.id as campaign_id,
acws.unique_days,
c2.id as phone_id,
c2.phone,
c2.created_at as contact_created_at,
t.url,
t.text
from active_campaigns_with_settings as acws
join templates as t on t.campaign_id = acws.id
join contacts c2 on acws.id = c2.campaign_id
where c2.aggregated = false and c2.is_valid = false
),
prefinal as (
select
acwm.campaign_id,
acwm.unique_days,
acwm.phone,
acwm.phone_id,
acwm.text,
acwm.url,
(acwm.contact_created_at::date-tm.send_at::date) as cntday
from active_campaigns_with_messages as acwm
left join templates_messages tm on
acwm.phone = tm.phone and acwm.campaign_id = tm.campaign_id and
tm.send_at >= now() - make_interval(days => acwm.unique_days)
),
final as (
select * from prefinal as pf where cntday > pf.unique_days or cntday is null
)
select * from final
Здравствуйте, есть такой запрос Как убрать повторяющиеся номера телефона из ответа?
Ответы (1 шт):
Автор решения: Мягков А.С РК4-12
→ Ссылка
with
active_campaigns_with_settings as (
select
*
from campaigns as c
join campaigns_settings as cs on c.id = cs.campaign_id
where
date_part('hour', now()) between cs.worktime_from and cs.worktime_to and
c.is_active=true
),
active_campaigns_with_messages as (
select
acws.id as campaign_id,
acws.unique_days,
c2.id as phone_id,
c2.phone,
c2.created_at as contact_created_at,
t.url,
t.text
from active_campaigns_with_settings as acws
join templates as t on t.campaign_id = acws.id
join contacts c2 on acws.id = c2.campaign_id
where c2.aggregated = false and c2.is_valid = false
),
prefinal as (
select
acwm.campaign_id,
acwm.unique_days,
acwm.phone,
acwm.phone_id,
acwm.text,
acwm.url,
(acwm.contact_created_at::date-tm.send_at::date) as cntday
from active_campaigns_with_messages as acwm
left join templates_messages tm on
acwm.phone = tm.phone and acwm.campaign_id = tm.campaign_id and
tm.send_at >= now() - make_interval(days => acwm.unique_days)
),
final as (
select * from prefinal as pf where cntday > pf.unique_days or cntday is null
)
select distinct on (campaign_id, phone) * from final
Ответ нашел сам собой, вот простое решение
