Соедините 3 таблицы и хотите получить первую строку, соответствующую условию - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть 2 таблицы v_change_relations и v_change_all_data, они связаны с помощью change_id первой таблицы и change_id второй таблицы, обычно это отношение один к одному, но в некоторых случаях будет более одного change_id, соответствующего нескольким change_id в этих случаях мне нужно выбрать только один выбор только первый ряд из 2 таблиц

PARENT_CHANGE_ID    INFRA_CHANGE_ID PARENT_TASK_ID
CRQ000001327088 CRQ000001377141 TAS000004419606
CRQ000001327088 CRQ000001376558 TAS000004419606

Мне нужна только 1 строка для каждого change_id

PARENT_CHANGE_ID    INFRA_CHANGE_ID PARENT_TASK_ID
CRQ000001327088 CRQ000001377141 TAS000004419606

1 Ответ

0 голосов
/ 02 апреля 2020

Если вы хотите агрегировать строки, то давайте использовать функцию агрегирования:

select PCD.CHANGE_ID PARENT_CHANGE_ID, 
       MIN(ICD.CHANGE_ID) INFRA_CHANGE_ID,
       PCT.TASK_ID PARENT_TASK_ID
FROM
V_CHANGE_ALL_DATA PCD
JOIN V_CHANGE_TASKS PCT ON PCD.CHANGE_ID=PCT.CHANGE_ID AND PCT.STATUS NOT IN ('Closed','Completed','Cancelled','Staged')
JOIN V_CHANGE_RELATIONS CR ON PCD.CHANGE_ID=CR.REQUEST_ID
JOIN V_CHANGE_ALL_DATA ICD ON ICD.CHANGE_ID=CR.CHANGE_ID
where
PCD.TEMPLATE LIKE 'slc-asset%provision'
AND ICD.TEMPLATE LIKE '%server-lifecycle:global%'
AND (ICD.STATUS_REASON is null
OR ICD.STATUS_REASON = 'Final Review Complete'
OR ICD.STATUS_REASON = 'Automatically Closed')
And TRUNC(TIMEZONE_CONVERT(PCD.SCHEDULED_START_DATE)) >= to_date('2019-04-29','YYYY-MM-DD')
AND PCD.CHANGE_ID = 'CRQ000001327088'
GROUP BY pcd.change_id, pct.task_id

Это просто выберет минимальный идентификатор изменения для каждого родительского изменения идентификатора и комбинации родительских задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...