解决方案 »

  1.   

    分析函数lag基本用法
    SQL> with t as(
      2  select '张三' A,3 B FROM DUAL UNION ALL
      3  select '李四' A,6 B FROM DUAL UNION ALL
      4  select '王五' A,12 B FROM DUAL
      5  )
      6  SELECT A,B,B-LAG(B,1,B)OVER(ORDER BY B) AS C
      7  FROM T;A             B          C
    ---- ---------- ----------
    张三          3          0
    李四          6          3
    王五         12          6SQL>
      

  2.   

     谢谢,非常感谢,这种怎么实现呢
    name    ID        差额
    张三       3           0
    张三       6           3
    张三      12          6
    李四       9            9-9=0 而不是9-6  只有name相同的才计算差额
    李四      15           15-9=6
    李四      19            19-15=4
    王五      10            10-10=0
    王五      12            12-10=2
      

  3.   

    over(partition by name order by name,id)
      

  4.   

    增加partition即可
    SELECT A,B,B-LAG(B,1,B)OVER(partition by A ORDER BY B) AS C
     FROM T;