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