CREATE TABLE t_c
(
id_c NUMBER
, time_c DATE
);
INSERT
WHEN id_a IS NULL THEN INTO t_c(id_c, time_c) VALUES (id_b, time_b)
WHEN id_b IS NULL THEN INTO t_c(id_c, time_c) VALUES (id_a, time_a)
WHEN id_a = id_b AND time_a > time_b THEN INTO t_c(id_c, time_c) VALUES (id_a, time_a)
WHEN id_a = id_b AND time_a <= time_b THEN INTO t_c(id_c, time_c) VALUES (id_b, time_b)
SELECT *
FROM
(
SELECT 1 id_a, DATE'2013-01-01' time_a FROM dual UNION ALL
SELECT 2 id_a, DATE'2013-01-02' time_a FROM dual UNION ALL
SELECT 3 id_a, DATE'2013-01-03' time_a FROM dual UNION ALL
SELECT 4 id_a, DATE'2013-01-04' time_a FROM dual UNION ALL
SELECT 7 id_a, DATE'2013-01-07' time_a FROM dual UNION ALL
SELECT 8 id_a, DATE'2013-01-08' time_a FROM dual
) t_a
FULL JOIN
(
SELECT 1 id_b, DATE'2013-01-01' time_b FROM dual UNION ALL
SELECT 2 id_b, DATE'2013-01-02' time_b FROM dual UNION ALL
SELECT 5 id_b, DATE'2013-01-05' time_b FROM dual UNION ALL
SELECT 6 id_b, DATE'2013-01-06' time_b FROM dual UNION ALL
SELECT 7 id_a, DATE'2013-01-09' time_a FROM dual UNION ALL
SELECT 8 id_a, DATE'2013-01-01' time_a FROM dual
) t_b
ON t_a.id_a = t_b.id_b
;
/*
1 2013-01-01 00:00:00 1 2013-01-01 00:00:00
2 2013-01-02 00:00:00 2 2013-01-02 00:00:00
5 2013-01-05 00:00:00
6 2013-01-06 00:00:00
7 2013-01-07 00:00:00 7 2013-01-09 00:00:00
8 2013-01-08 00:00:00 8 2013-01-01 00:00:00
4 2013-01-04 00:00:00
3 2013-01-03 00:00:00
*/
SELECT *
FROM t_c;
/*
5 2013-01-05 00:00:00
6 2013-01-06 00:00:00
4 2013-01-04 00:00:00
3 2013-01-03 00:00:00
8 2013-01-08 00:00:00
1 2013-01-01 00:00:00
2 2013-01-02 00:00:00
7 2013-01-09 00:00:00
*/