Revision: 27386
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 4, 2010 15:01 by mprabhuram
Initial Code
SQL> select * from t; START END_D ID ----- ----- ---------- 10:00 10:45 1 10:30 11:45 1 12:30 12:45 1 12:40 13:01 1 10:10 10:20 1 12:35 13:20 1 10:00 10:45 2 10:55 11:00 2 10:00 10:30 2 9 rows selected. SQL> select 2 -- case when start_dat between lgs and lge then lge else start_dat end start_dat, 3 -- end_dat, 4 id, 5 sum(24 * 60 * (end_dat - case when start_dat between lgs and lge then lge else start_dat end)) diff 6 from ( 7 select id, start_dat, 8 lag(start_dat) over (partition by id order by start_dat) lgs, 9 lag(end_dat) over (partition by id order by start_dat) lge, 10 end_dat 11 from ( 12 select id, start_dat, 13 lag(start_dat) over (partition by id order by start_dat) lgsi, 14 lag(end_dat) over (partition by id order by start_dat) lgei, 15 end_dat 16 from t 17 ) 18 where end_dat > lgei or lgsi is null 19 ) 20 group by id 21 / ID DIFF ---------- ---------- 1 155 2 50
Initial URL
http://www.experts-exchange.com/Database/Oracle/Q_22861266.html
Initial Description
Use this logic to avoid double counting in ORACLE SQL
Initial Title
How to avoid double counting
Initial Tags
sql, Oracle
Initial Language
SQL