finish script

This commit is contained in:
Basyrov Rustam
2024-12-18 22:50:16 +03:00
parent 5cd365a113
commit 38c32701e7

View File

@@ -160,12 +160,17 @@ select greatest(cast(to_timestamp(1729931470) as time),
with tmp_table2 as
(with tmp_table as
with final_table2 as
(with pre_table as
(select
*,
-- Перевод из unix-времени в обычное
cast(to_timestamp(created_at) as time) as dtime,
-- удаление подряд идущих сообщений от одного пользователя по принципу проверки равенства
-- между автором текущего и предыдущего сообщения (true, если авторы разные)
-- coalesce -- чтобы NULL заменить на true у первого сообщения в сделке
coalesce(created_by <> lag(created_by) over(partition by entity_id order by created_at), true) as not_dupl,
-- нумерация записей внутри сделки, чтобы все сделки начинались с сообщения клиента
row_number() over(partition by entity_id order by created_at) as num
from
chat_messages cm
@@ -173,6 +178,11 @@ order by entity_id, created_at)
select
*,
dtime,
-- учет нерабочего времени, возможны 4 варианта
-- 1) менеджер ответил ночью -- тогда время ответа равно 24:00 - `время сообщения клиента`
-- 2) клиент написал ночью -- тогда время ответа отсчитывается от 09:30
-- 3) клиент написал днем, а менеджер ответил на след. день -- тогда время ответа равно модулю
-- разности времен сообщений (сделано через `greates`, так как interval не поддерживается `abs`)
case when (dtime < '09:30:00'::time and created_by <> 0)
then '24:00:00'::time - lag(dtime) over(partition by entity_id order by created_at)
when (dtime < '09:30:00'::time and created_by = 0)
@@ -182,21 +192,27 @@ select
lag(dtime) over(partition by entity_id order by created_at) - dtime)
else dtime - lag(dtime) over(partition by entity_id order by created_at)
end as diff_time
from tmp_table
where tmp_table.not_dupl
from pre_table
where
-- игнорируем дупликаты
pre_table.not_dupl
and
not (tmp_table.num = 1 and tmp_table.created_by <> 0))
-- игнорируем записи в сделках, которые начинаются с сообщения менеджера
not (pre_table.num = 1 and pre_table.created_by <> 0))
select
r.rop_name,
m.name_mop,
-- приведение к timestamp для фильтрации в datalens
cast(to_timestamp(created_at) as timestamp) as datetime,
diff_time
from
tmp_table2 as tt2
-- обычный INNER JOIN трех таблиц
final_table2 as ft2
join
managers as m on m.mop_id = tt2.created_by
managers as m on m.mop_id = ft2.created_by
join
rops as r on r.rop_id = m.rop_id::int4
-- пришлось привести m.rop_id к int4, так как разные типы
rops as r on r.rop_id = cast(m.rop_id as int4)
where
created_by <> 0