2012-05-25 116 views
0

鑑於此表中創建時間表
重疊日期

Insert Into positions (Emp_Id,Gtype,Amt,Start_Date,Stop_Date) 
    select 'XA0022',1,1000,'01-MAY-2010','08-MAY-2012' from dual union 
    Select 'XA0022',1,1000,'01-MAY-2010','31-DEC-2012' From Dual Union 
    Select 'XA0022',2,500,'03-APR-2012','15-JUL-2012' From Dual Union 
    Select 'XA0022',1,421,'01-MAY-2012','23-MAY-2012' From Dual Union 
    Select 'XA0022',1,1514,'09-MAY-2012','31-DEC-2012' From Dual union 
    select 'XA0022',1,600,'24-MAY-2012','24-MAY-2012' from dual; 

我如何獲得這樣的:

from   to   type1 type2 
    01-May-2010 02-Apr-2012  2000 0 
    03-Apr-2012 30-Apr-2012  2000 500 
    01-May-2012 07-May-2012  2421 500 
    08-May-2012 08-May-2012  2421 500 
    09-May-2012 22-May-2012  2935 500 
    23-May-2012 23-May-2012  2935 500 
    24-May-2012 15-Jul-2012  3114 500 
    16-Jul-2012 31-Dec-2012  3014 0 

注:量在start_date上有效,並且在stop_date後一天不生效。

任何指針感激地收到!

+0

你能外推多一點嗎?我不理解type1,type2是如何進入它的。 – Nick

+0

我認爲type1,type2不是最棘手的位。 我作爲源數據什麼是一個開始和結束日期與金額表 有些開始/停止日期重疊 我需要的是能夠推斷出每即在類型總量每次職位開始或停止時都會產生效果。 把它想象成一條時間線。 從2010年5月1日到12年4月2日總計type1 = 2000,type2 = 0 這是因爲從10年5月1日開始有2個1型, 12作爲類型2開始,所以type1 = 2000,type2 = 0在前一天結束02-Apr-12 – lidbanger

+0

我認爲這是我想要的僞代碼(現在忽略類型1,2的東西)'code' 情況下,當至少((following_rows.start_date-1),following_rows.end_date)current_row.start_date之間和current_row.stop_date然後至少((following_rows.start_date-1),following_rows.end_date) 別的 current_row.end_date 端 '代碼' 我無法獲得分區窗口,因爲我想要或區分當前ro w值和以下行。 – lidbanger

回答

0

使用Oracle的支點。

Oracle Pivot

select * from 
(select emp_id, gtype, amt, start_date, stop_date 
from positions) 
pivot (sum(amt) as amt for (gtype) in (1 as "TYPE1", 2 as "TYPE2")) 
order by emp_id, start_date; 

一些更多的信息(感謝),這樣的事情?

select emp_id, gtype, start_date, 
case when next_amt <> amt then next_start_date -1 end as to_date 
from 
(select emp_id, gtype, start_date, amt, 
lead(start_date,1) over (order by emp_id, start_date) next_start_date, 
lead(amt,1) over (order by emp_id, start_date) next_amt 
from 
positions) 
+0

不完全。我需要用一個開始日期和停止日期來計算這兩個日期之間的有效數量。將期望輸出的第一行與2010年5月1日開始的源日期進行比較。 – lidbanger