SQL> SQL> -- Refer to ORACLE mannual for correct interval literals SQL> SQL> select * from t1_; C1 C2 ---------- -------------------- 1 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 1 03-jan-2003 00:00:00 1 04-jan-2003 00:00:00 1 05-jan-2003 00:00:00 1 06-jan-2003 00:00:00 1 07-jan-2003 00:00:00 2 05-jan-2003 00:00:00 2 06-jan-2003 00:00:00 2 07-jan-2003 00:00:00 3 08-jan-2003 00:00:00 C1 C2 ---------- -------------------- 3 09-jan-2004 00:00:00 3 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 14 rows selected. SQL> -- interval from 01-jan-2003 00:00:00 to 06-jan-2003 00:00:00 SQL> -- is 5 whole days SQL> select c1, c2, min(c2) over (partition by c1 2 order by c2 range interval '5' day preceding) 3 min_date from t1_; C1 C2 MIN_DATE ---------- -------------------- -------------------- 1 01-jan-2003 00:00:00 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 01-jan-2003 00:00:00 1 03-jan-2003 00:00:00 01-jan-2003 00:00:00 1 04-jan-2003 00:00:00 01-jan-2003 00:00:00 1 05-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 00:00:00 01-jan-2003 00:00:00 1 07-jan-2003 00:00:00 02-jan-2003 00:00:00 2 05-jan-2003 00:00:00 05-jan-2003 00:00:00 2 06-jan-2003 00:00:00 05-jan-2003 00:00:00 2 07-jan-2003 00:00:00 05-jan-2003 00:00:00 3 08-jan-2003 00:00:00 08-jan-2003 00:00:00 C1 C2 MIN_DATE ---------- -------------------- -------------------- 3 08-mar-2003 00:00:00 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 09-dec-2003 00:00:00 3 09-jan-2004 00:00:00 09-jan-2004 00:00:00 14 rows selected. SQL> SQL> insert into t1_ values(1,to_date('06-jan-2003 16:30:30','dd-mon-yyyy hh24:mi:ss')); 1 row created. SQL> -- interval from 01-jan-2003 00:00:00 to 06-jan-2003 16:30:30 SQL> -- is now greater than 5 days, so the min(date) for the row 06-jan-2003 16:30:30 SQL> -- is no longer 01-jan-2003 00:00:00 SQL> select c1, c2, min(c2) over (partition by c1 2 order by c2 range interval '5' day preceding) 3 min_date from t1_; C1 C2 MIN_DATE ---------- -------------------- -------------------- 1 01-jan-2003 00:00:00 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 01-jan-2003 00:00:00 1 03-jan-2003 00:00:00 01-jan-2003 00:00:00 1 04-jan-2003 00:00:00 01-jan-2003 00:00:00 1 05-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 16:30:30 02-jan-2003 00:00:00 1 07-jan-2003 00:00:00 02-jan-2003 00:00:00 2 05-jan-2003 00:00:00 05-jan-2003 00:00:00 2 06-jan-2003 00:00:00 05-jan-2003 00:00:00 2 07-jan-2003 00:00:00 05-jan-2003 00:00:00 C1 C2 MIN_DATE ---------- -------------------- -------------------- 3 08-jan-2003 00:00:00 08-jan-2003 00:00:00 3 08-mar-2003 00:00:00 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 09-dec-2003 00:00:00 3 09-jan-2004 00:00:00 09-jan-2004 00:00:00 15 rows selected. SQL> SQL> -- This date from JAN-01 still does not catch up SQL> insert into t1_ values(1,to_date('01-jan-2003 9:30:30','dd-mon-yyyy hh24:mi:ss')); 1 row created. SQL> select c1, c2, min(c2) over (partition by c1 2 order by c2 range interval '5' day preceding) 3 min_date from t1_; C1 C2 MIN_DATE ---------- -------------------- -------------------- 1 01-jan-2003 00:00:00 01-jan-2003 00:00:00 1 01-jan-2003 09:30:30 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 01-jan-2003 00:00:00 1 03-jan-2003 00:00:00 01-jan-2003 00:00:00 1 04-jan-2003 00:00:00 01-jan-2003 00:00:00 1 05-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 16:30:30 02-jan-2003 00:00:00 1 07-jan-2003 00:00:00 02-jan-2003 00:00:00 2 05-jan-2003 00:00:00 05-jan-2003 00:00:00 2 06-jan-2003 00:00:00 05-jan-2003 00:00:00 C1 C2 MIN_DATE ---------- -------------------- -------------------- 2 07-jan-2003 00:00:00 05-jan-2003 00:00:00 3 08-jan-2003 00:00:00 08-jan-2003 00:00:00 3 08-mar-2003 00:00:00 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 09-dec-2003 00:00:00 3 09-jan-2004 00:00:00 09-jan-2004 00:00:00 16 rows selected. SQL> SQL> -- Change the interval to 5 days 10 hours SQL> insert into t1_ values(1,to_date('01-jan-2003 9:30:30','dd-mon-yyyy hh24:mi:ss')); 1 row created. SQL> select c1, c2, min(c2) over (partition by c1 2 order by c2 range interval '5 10' day to hour preceding) 3 min_date from t1_; C1 C2 MIN_DATE ---------- -------------------- -------------------- 1 01-jan-2003 00:00:00 01-jan-2003 00:00:00 1 01-jan-2003 09:30:30 01-jan-2003 00:00:00 1 01-jan-2003 09:30:30 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 01-jan-2003 00:00:00 1 03-jan-2003 00:00:00 01-jan-2003 00:00:00 1 04-jan-2003 00:00:00 01-jan-2003 00:00:00 1 05-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 16:30:30 01-jan-2003 09:30:30 1 07-jan-2003 00:00:00 02-jan-2003 00:00:00 2 05-jan-2003 00:00:00 05-jan-2003 00:00:00 C1 C2 MIN_DATE ---------- -------------------- -------------------- 2 06-jan-2003 00:00:00 05-jan-2003 00:00:00 2 07-jan-2003 00:00:00 05-jan-2003 00:00:00 3 08-jan-2003 00:00:00 08-jan-2003 00:00:00 3 08-mar-2003 00:00:00 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 09-dec-2003 00:00:00 3 09-jan-2004 00:00:00 09-jan-2004 00:00:00 17 rows selected. SQL> SQL> -- This one does and become the min(date) of the row 06-jan-2003 16:30:30 SQL> insert into t1_ values(1,to_date('01-jan-2003 20:30:30','dd-mon-yyyy hh24:mi:ss')); 1 row created. SQL> select c1, c2, min(c2) over (partition by c1 2 order by c2 range interval '5' day preceding) 3 min_date from t1_; C1 C2 MIN_DATE ---------- -------------------- -------------------- 1 01-jan-2003 00:00:00 01-jan-2003 00:00:00 1 01-jan-2003 09:30:30 01-jan-2003 00:00:00 1 01-jan-2003 09:30:30 01-jan-2003 00:00:00 1 01-jan-2003 20:30:30 01-jan-2003 00:00:00 1 02-jan-2003 00:00:00 01-jan-2003 00:00:00 1 03-jan-2003 00:00:00 01-jan-2003 00:00:00 1 04-jan-2003 00:00:00 01-jan-2003 00:00:00 1 05-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 00:00:00 01-jan-2003 00:00:00 1 06-jan-2003 16:30:30 01-jan-2003 20:30:30 1 07-jan-2003 00:00:00 02-jan-2003 00:00:00 C1 C2 MIN_DATE ---------- -------------------- -------------------- 2 05-jan-2003 00:00:00 05-jan-2003 00:00:00 2 06-jan-2003 00:00:00 05-jan-2003 00:00:00 2 07-jan-2003 00:00:00 05-jan-2003 00:00:00 3 08-jan-2003 00:00:00 08-jan-2003 00:00:00 3 08-mar-2003 00:00:00 08-mar-2003 00:00:00 3 09-dec-2003 00:00:00 09-dec-2003 00:00:00 3 09-jan-2004 00:00:00 09-jan-2004 00:00:00 18 rows selected. SQL> SQL> spool off