У меня есть БОЛЬШАЯ (23 миллиона строк) таблица CONTRATOS, в которой есть следующие столбцы:
SELECT
CONTRATO,
CODIGO_ORIGEN,
ORIGEN
FROM CONTRATOS;
Есть несколько строк с одинаковым значением для столбца CODIGO_ORIGEN:
CODIGO_ORIGEN CONTRATO ORIGEN
------------- ---------- --------
1 345 CONT
1 363 BKP
1 645 BKP
1 365 CONT
Мне нужно получить только один CONTRATO для каждого CODIGO_ORIGEN, но всегда отдавать приоритет значению 'CONT' . Таким образом, в этом примере это будет CONTRATO со значением 365
Я пытался что-то вроде этого:
SELECT
CODIGO_ORIGEN,
CASE
WHEN ORIGEN = 'CONT' THEN
FIRST_VALUE (CONTRATO) OVER (PARTITION BY CODIGO_ORIGEN ORDER BY CONTRATO DESC)
WHEN ORIGEN = 'BKP' THEN
FIRST_VALUE (CONTRATO) OVER (PARTITION BY CODIGO_ORIGEN ORDER BY CAMPO1 DESC, CAMPO2 DESC, CONTRATO DESC)
END AS CONTRATO
FROM CONTRATOS;
В случае, если ORIGEN это 'CONTR', я должен отсортировать по наибольшему CONTRATO и получить столбец CONTRATO. В случае, если ORIGEN 'BKP', я должен отсортировать по разным столбцам и получить столбец CONTRATO.
Наконец, я должен иметь одну уникальную строку с CODIGO_ORIGEN -> CONTRATO (1: 1).
Есть ли простой способ сделать это (1 запрос)?
Заранее спасибо!