Установка Oracle :
CREATE TABLE Table1 (SEQ, REQ) AS
SELECT '001', 'X1' FROM DUAL UNION ALL
SELECT '002', 'X1' FROM DUAL UNION ALL
SELECT '003', 'X1' FROM DUAL UNION ALL
SELECT '004', 'X1' FROM DUAL UNION ALL
SELECT '001', 'X2' FROM DUAL UNION ALL
SELECT '002', 'X2' FROM DUAL UNION ALL
SELECT '003', 'X2' FROM DUAL UNION ALL
SELECT '001', 'X3' FROM DUAL UNION ALL
SELECT '002', 'X3' FROM DUAL UNION ALL
SELECT '003', 'X3' FROM DUAL UNION ALL
SELECT '004', 'X3' FROM DUAL UNION ALL
SELECT '001', 'X4' FROM DUAL UNION ALL
SELECT '002', 'X4' FROM DUAL UNION ALL
SELECT '003', 'X4' FROM DUAL UNION ALL
SELECT '004', 'X4' FROM DUAL;
CREATE TABLE Table2 (SEQ, REQ, RES) AS
SELECT '001', 'X1', 'D' FROM DUAL UNION ALL
SELECT '002', 'X1', 'D' FROM DUAL UNION ALL
SELECT '003', 'X1', 'K' FROM DUAL UNION ALL
SELECT '004', 'X1', 'C' FROM DUAL UNION ALL
SELECT '001', 'X2', 'D' FROM DUAL UNION ALL
SELECT '002', 'X2', 'D' FROM DUAL UNION ALL
SELECT '003', 'X2', 'C' FROM DUAL UNION ALL
SELECT '001', 'X3', 'D' FROM DUAL UNION ALL
SELECT '002', 'X3', 'D' FROM DUAL UNION ALL
SELECT '003', 'X3', 'C' FROM DUAL UNION ALL
SELECT '004', 'X3', 'K' FROM DUAL UNION ALL
SELECT '001', 'X4', 'D' FROM DUAL UNION ALL
SELECT '002', 'X4', 'D' FROM DUAL UNION ALL
SELECT '003', 'X4', 'C' FROM DUAL;
Запрос
SELECT SEQ, REQ
FROM (
SELECT t1.*,
MAX( t1.SEQ ) OVER ( PARTITION BY t1.REQ ) AS max_seq,
MAX( t2.RES ) KEEP ( DENSE_RANK LAST ORDER BY t1.SEQ )
OVER ( PARTITION BY t1.REQ ) AS max_res
FROM table1 t1
LEFT OUTER JOIN table2 t2
ON ( t1.seq = t2.seq AND t1.req = t2.req )
)
WHERE SEQ = max_seq
AND max_res = 'C'
Выход
SEQ | REQ
:-- | :--
004 | X1
003 | X2
дБ <> скрипка здесь