I believe this is the request you are looking for:
CREATE TABLE t1(id INTEGER, time DATE); CREATE TABLE t2(id INTEGER, time DATE); INSERT INTO t1 VALUES (1, TO_DATE ('18:12:02', 'HH24:MI:SS')); INSERT INTO t1 VALUES (2, TO_DATE ('18:46:57', 'HH24:MI:SS')); INSERT INTO t1 VALUES (3, TO_DATE ('17:49:44', 'HH24:MI:SS')); INSERT INTO t1 VALUES (4, TO_DATE ('12:19:24', 'HH24:MI:SS')); INSERT INTO t1 VALUES (5, TO_DATE ('11:00:01', 'HH24:MI:SS')); INSERT INTO t1 VALUES (6, TO_DATE ('17:12:45', 'HH24:MI:SS')); INSERT INTO t2 VALUES (1, TO_DATE ('18:13:02', 'HH24:MI:SS')); INSERT INTO t2 VALUES (2, TO_DATE ('17:46:57', 'HH24:MI:SS')); SELECT t1.*, t2.* FROM t1, t2, ( SELECT t2.id, MIN (ABS (t2.time - t1.time)) diff FROM t1, t2 GROUP BY t2.id) b WHERE ABS (t2.time - t1.time) = b.diff;
Make sure the time columns have the same date, because the t2.time - t1.time part will not work otherwise.
EDIT : Thanks for agreeing, but Ben's answer below is better. It uses Oracle analytic functions and will work much better.
mavroprovato
source share