0

私は今、1つの問題に数時間立ち往生しています。

次のデータを含むテーブルがあるとします。

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

たとえば、2012 年 5 月 5 日の結果とその月の最初の日の比率を取得する必要があります。EG 2012 年 5 月 5 日未処理分を 2012 年 5 月 1 日未処理分で割った値 (24 678 956/35 678 956)

どの機能を使えばいいですか?to_char(trunc(trunc(a.date_,'MM'), 'MM'),'DD-MM-YYYY') の結果で / によってパーティションをオーバーしようとしました

私にはうまくいかないようでした

4

2 に答える 2

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分析関数は、first record実行後にパーティションから を選択します。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;

出力

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 行が選択されました。

SQLFIDDLE リンク

于 2012-06-17T14:58:16.430 に答える
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
于 2012-06-17T14:22:45.560 に答える