Я ищу запрос на подсчет в объединении из 3 таблиц, который может подсчитать различные значения одной из этих таблиц.
У меня есть 3 таблицы, к которым мне нужно присоединиться, чтобы получить ожидаемые данные (Workflow
, Message
и Message_Workflow_Relation
).
Я хочу получить количество рабочих процессов, сгруппированных по статусу + одно поле подключенной таблицы Message
в моем результате (related_name
). Связанное имя должно быть взято из записей, где поле adapter
равно wf
, однако иногда есть несколько записей Message, соответствующих этому условию, что приведет к большему количеству наборов данных в моем подсчете, чем тех, которые действительно есть.
Я почти уверен, что возможно разобраться, но только не работай.
К сожалению, я не могу изменить структуру таблицы, так как это заданная схема продукта, который мы используем.
Моя структура таблицы выглядит следующим образом:
Workflow:
id | workflow_id | starttime | endtime | status
------------------------------------------------------
1 | 22 | 0 | 200 | OK
2 | 23 | 220 | 920 | ERROR
3 | 55 | 202 | 588 | OK
Message_Workflow_Relation:
id | message_id | workflow_id |
-------------------------------
1 | 122 | 22 |
2 | 235 | 22 |
3 | 456 | 22 |
4 | 982 | 22 |
5 | 444 | 23 |
6 | 445 | 23 |
7 | 585 | 55 |
8 | 738 | 55 |
9 | 399 | 55 |
Сообщение:
id | message_id | starttime | endtime | adapter | related_name |
----------------------------------------------------------------
1 | 122 | 0 | 2335 | wf | workflow_1 |
2 | 235 | 222 | 1000 | other | other |
3 | 456 | 343 | 2330 | another | another |
4 | 982 | 222 | 2200 | wf | workflow_1 |
5 | 444 | 2223 | 3333 | wf | workflow_2 |
6 | 445 | 1123 | 1244 | manual | manual |
7 | 585 | 5555 | 5566 | wf | workflow_1 |
8 | 738 | 655 | 999 | wf | worfklow_1 |
9 | 399 | 6655 | 7732 | another | another |
Это должно вернуть следующий результат:
count(*) | related_name | status |
----------------------------------
2 | workflow_1 | OK |
1 | workflow_2 | ERROR |
Я застрял с этим следующим утверждением, но я не уверен, как
сделайте выбор на adapter = wf unique
для каждого рабочего процесса:
select distinct
count(*),
m.related_name,
w.status
from
workflow as w,
message as m,
msg_bpm_rel as rel
where rel.workflow_id = w.workflow_id
and rel.message_id = m.message_id
and m.adapter = 'PE'
group by m.related_name,w.status
Это возвращает меня (4 workflow_1
вместо 2):
count(*) | related_name | status |
----------------------------------
4 | workflow_1 | OK |
1 | workflow_2 | ERROR |
Как мне сделать правильный запрос для достижения этого?
Любая помощь приветствуется.