Я думаю, что ответом на ваш настоящий вопрос является использование оконных функций:
select s1.src_sys_id schema_nm,
to_date(CAST(CAST(s3.execn_ts AS BIGINT)/1000 AS TIMESTAMP)) as maxtime
from table1 s1 left join
(select s2.*,
row_number() over (partition by s2.src_sys_id order by s2.execn_ts desc) as seqnum
from table2 s2
) s2
on s1.src_sys_id = s2.src_sys_id and s2.seqnum = 0;
Причина, по которой ваш запрос отфильтровывает строки, немного сложна. left join
в порядке. Даже inner join
в порядке. , , насколько это возможно. Однако оба объединения находятся в одной таблице. Таким образом, если соответствующая строка не существует для первого join
, то для второго не существует строки.
Другими словами, inner join
отфильтровывает те же строки, что и несопоставленные строки в left join
.
Все вышесказанное, оконные функции - лучший подход, хотя повторное использование left join
также решит вашу проблему.