Объединение результирующих таблиц в одну?
#39995120
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
Есть два запроса, столбец "сотрудник" в таблицах одинаковый. Как можно объединить их, выполняя один общий запрос?
1 запрос
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
select state,сотрудник
from(
select state, (select first_name || ' ' || left(last_name,1) ||'.' from users where id = ctt.user_id) as "сотрудник"
from (
SELECT (regexp_matches(user_id, '(\d+)'))[1]::int user_id,
case when extract(epoch from(localtimestamp - (timestamp with time zone 'epoch' + extract('epoch' from last_request::interval) * interval '1 second')))/60 < 5 then '1'
when extract(epoch from(localtimestamp - (timestamp with time zone 'epoch' + extract('epoch' from last_request::interval) * interval '1 second')))/60 >= 5 then '2'
else '3' end as "state"
FROM crosstab(
'SELECT session_id, data_key, data_value
FROM sessions
WHERE
data_key = ''UserID'' or
data_key = ''UserLastLoginTimestamp'' or
data_key = ''UserLastRequest''
ORDER BY 1,2')
as ct (
session_id varchar,
user_id varchar,
last_login varchar,
last_request varchar)) as ctt
where user_id in (24,41,44,57,58,63,70,76,80,82,87,94,128)) as cttt
2 запрос
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
select сотрудник,"в работе",ожидающие,сегодня,today,месяц,month
from(
select
(select first_name || ' ' || left(last_name,1) ||'.' from users where id = t.user_id) as "сотрудник",
(select count(*) from ticket where responsible_user_id = t.user_id and ticket_state_id in (1,4)) as "в работе",
(select count(*) from ticket where responsible_user_id = t.user_id and ticket_state_id in (6,10)) as "ожидающие",
sum(cnt_day) as "сегодня", sum(cnt_day * coeff) as "today",
sum(cnt_month) as "месяц", sum(cnt_month * coeff) as "month"
from (
select user_id, service_id,
count(*) filter (where change_time >= current_date) as cnt_day,
count(*) filter (where change_time >= date_trunc('month', current_date)) as cnt_month
from ticket
where user_id in (24,41,44,57,58,63,70,76,80,82,87,94,128) and ticket_state_id not in (1,4,6)
group by user_id, service_id) as t
join service_coeff using (service_id)
group by user_id)as tt
Есть платформа grafana я вставляю эти два запроса и он каким то чудом объединяет их, хочу понять как он делает это. (смотреть вложение)
Так же из первого запроса не все сотрудники выходят и из-за того их нету статус у них пустой, как нибудь можно вписать статус "3" где стоит пустое значение?
|
|