【问题标题】:Divide data from other days by data from one particular day将其他日期的数据除以某一特定日期的数据
【发布时间】:2012-06-17 13:43:03
【问题描述】:

我在一个问题上卡住了几个小时。

假设我有一个包含以下数据的表格:

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 日结果与该月第一天的比率 例如。 2012 年 5 月 5 日未偿除以 2012 年 1 月 5 日未偿(24 678 956/35 678 956)

我应该使用什么功能? 尝试按 to_char(trunc(trunc(a.date_,'MM'), 'MM'),'DD-MM-YYYY') 的结果 / 进行分区

好像对我没用

【问题讨论】:

    标签: sql oracle analytic-functions


    【解决方案1】:
    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 之后从分区中选择first record

    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 link

    【讨论】:

      【解决方案2】:

      试试这个:

      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
      

      【讨论】:

      • 谢谢你,但我想到了我的,决定不这样做,因为它对我的数据来说太重了,我的意思是选择本身。有没有办法通过使用分析函数来使用“更智能”的移动?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多