Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算不同日期两个值之间的百分比差异_Sql - Fatal编程技术网

Sql 计算不同日期两个值之间的百分比差异

Sql 计算不同日期两个值之间的百分比差异,sql,Sql,我已经创建了一个查询,其中包含最新更改的金额,但我还想包括新金额与前一个金额的比较是增加还是减少,以及前一个金额与当前金额之间的百分比。 这是我的疑问: SELECT RATE.FK_ORGA_FRAN, RATE.FK_ORGA_OPER, RATE.FED, RATE.FK_RCOM, RATE.FK_PROD, RATE.FK_CDIR, RATE.FK_TIE

我已经创建了一个查询,其中包含最新更改的金额,但我还想包括新金额与前一个金额的比较是增加还是减少,以及前一个金额与当前金额之间的百分比。 这是我的疑问:

     SELECT 
        RATE.FK_ORGA_FRAN, 
        RATE.FK_ORGA_OPER,
        RATE.FED, 
        RATE.FK_RCOM, 
        RATE.FK_PROD,
        RATE.FK_CDIR,
        RATE.FK_TIER, 
        RATE.FK_TPRE, 
        RATE.FK_CURR, 
        RATE_STEP.UNIT_COST, 
        RATE.FK_CURR
    from RATE , RATE_STEP
    WHERE
        RATE.FK_ORGA_FRAN = RATE_STEP.FK_ORGA_FRAN AND
        RATE.FK_ORGA_OPER = RATE_STEP.FK_ORGA_OPER AND
        RATE.FK_RCOM = RATE_STEP.FK_RCOM AND
        RATE.FK_PROD = RATE_STEP.FK_PROD AND
        RATE.FK_CDIR = RATE_STEP.FK_CDIR AND
        RATE.FK_TIER = RATE_STEP.FK_TIER AND
        RATE.FK_TPRE = RATE_STEP.FK_TPRE AND
        RATE.FK_PMAT = RATE_STEP.FK_PMAT AND
        RATE.FED = RATE_STEP.FK_RATE_FED AND
        RATE.FED BETWEEN (SYSDATE) -16 AND (SYSDATE)
你能帮忙吗

非常感谢
Fred

假设您使用的是oracle SQL

样本数据如下:

DT              Rate
14-JAN-14        19
15-JAN-14        11
17-JAN-14        14
18-JAN-14        15
19-JAN-14        11
21-JAN-14        12
23-JAN-14        15

create table rate_log (dt date, rate number(5));
使用下面的查询并对其应用类似的逻辑

WITH data AS
  ( SELECT rownum rn, t.* FROM
    ( SELECT dt, rate FROM rate_log ORDER BY dt
    )t
  )
SELECT d1.dt,
  d1.rate,
  ROUND(( d1.rate - d2.rate ) * 100 / d1.rate, 2 )diff_perc,
  CASE
    WHEN(( d1.rate - d2.rate ) < 0 )
    THEN 'Increase'
    ELSE 'Decrease'
  END change
FROM data d1,
  data d2
WHERE( d1.rn - 1 ) =( d2.rn(+) )
ORDER BY d1.dt;

如能对专栏进行更多解释,并提供您正在使用的dbms,将不胜感激。