2012-06-17 35 views
0

現在,我幾個小時就陷入了一個問題。從其他日子除以來自某個特定日期的數據的數據

突然想到說我有下列數據的表:

month   outstanding 
01/05/2012  35 678 956 
02/05/2012  33 678 956 
03/05/2012  31 678 956 
04/05/2012  27 678 956 
05/05/2012  24 678 956 

我需要得到的說,一天比05/05/2012結果當月 E.G.的第一天傑出05/05/2012除傑出2012年1月5日(24 678 956/35 678 956)

我應該使用什麼函數? 試着做了分區由/通過TO_CHAR的結果(TRUNC(TRUNC(a.date _, 'MM'), 'MM'), 'DD-MM-YYYY')

沒有似乎對我

工作

回答

4
create table temp (month date , outstanding number); 
insert into temp values(to_date('01/05/2012','dd/mm/yyyy'),35678956); 
insert into temp values(to_date('02/05/2012','dd/mm/yyyy'),33678956); 
insert into temp values(to_date('03/05/2012','dd/mm/yyyy'),31678956); 
insert into temp values(to_date('04/05/2012','dd/mm/yyyy'),27678956); 
insert into temp values(to_date('05/05/2012','dd/mm/yyyy'),24678956); 
insert into temp values(to_date('01/06/2012','dd/mm/yyyy'),44678956); 
insert into temp values(to_date('02/06/2012','dd/mm/yyyy'),41678956); 

FIRST_VALUE解析函數做ORDER BY

SELECT month 
     ,outstanding 
     ,outstanding/(FIRST_VALUE(outstanding) 
      OVER (PARTITION BY to_char(month,'mm') 
      ORDER BY month 
     )) as ratio 
FROM temp 
ORDER BY month; 
012後,主從分區 first record選擇個

OUTPUT

MONTH  OUTSTANDING  RATIO 
--------- ----------- ---------- 
01-MAY-12 35678956   1 
02-MAY-12 33678956 .943944548 
03-MAY-12 31678956 .887889096 
04-MAY-12 27678956 .775778193 
05-MAY-12 24678956 .691695015 
01-JUN-12 44678956   1 
02-JUN-12 41678956 .932854295 

7行。

SQLFIDDLElink

+0

非常感謝,它解決了我的問題! <3 – lakhlu

1

試試這個:

SELECT t1.month, 
     t1.outstanding/t2.outstanding o2 
FROM your_table t1 
INNER JOIN 
    (SELECT * 
    FROM your_table 
    WHERE trunc(MONTH, 'mm') = MONTH) t2 ON trunc(t1.MONTH, 'mm') = t2.MONTH 
+0

感謝,但我對我的人會想到它,並決定不這樣做,因爲這是我的數據太重了,我指的是選擇本身。有沒有辦法通過使用分析功能來使用「更智能」的移動? – lakhlu

相關問題