1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| WITH TableA AS
(
SELECT 1 AS id, 'DUBOIS' AS nom, 'JEAN' AS prenom FROM dual union ALL
SELECT 2 , 'DUFION' , 'LOUIS' FROM dual union ALL
SELECT 3 , 'DUPONT' , 'ALAIN' FROM dual
)
, TableB AS
(
SELECT 1 AS id_B, 1 AS id, 25 AS prc, to_date('15/01/2003', 'dd/mm/yyyy') AS dt FROM dual union ALL
SELECT 2 , 1 , 50 , to_date('16/01/2002', 'dd/mm/yyyy') FROM dual union ALL
SELECT 3 , 3 , 75 , to_date('10/10/1981', 'dd/mm/yyyy') FROM dual
)
, TableC AS
(
SELECT 1 AS ID_C, 3 AS id, 10000 AS info, to_date('04/01/1970', 'dd/mm/yyyy') AS dt FROM dual union ALL
SELECT 2 , 3 , 500 , to_date('10/10/1981', 'dd/mm/yyyy') FROM dual union ALL
SELECT 3 , 2 , 200 , to_date('10/10/2009', 'dd/mm/yyyy') FROM dual
)
SELECT a.id, a.nom, a.prenom,
max(B.prc) AS prc_max,
max(B.dt) keep(dense_rank first ORDER BY B.prc DESC) AS dt_B,
max(c.info) keep(dense_rank first ORDER BY c.dt DESC) AS info,
max(c.dt) as dt_C
FROM TableA a
LEFT OUTER JOIN TableB b
ON b.id = a.id
LEFT OUTER JOIN TableC c
ON c.id = a.id
GROUP BY a.id, a.nom, a.prenom
ORDER BY a.id ASC;
ID NOM PRENOM PRC_MAX DT_B INFO DT_C
1 DUBOIS JEAN 50 16/01/2002
2 DUFION LOUIS 200 10/10/2009
3 DUPONT ALAIN 75 10/10/1981 500 10/10/1981 |
Partager