查找列之间的差异

时间:2019-03-24 19:46:58

标签: sql oracle

我正在尝试按经销商查找每列(日期)之间的差异。

我的表包含经销商,月份和每个月的值。我试图找出几个月之间的差异(上一个-下一个)。我已经尝试了一些LAG,LEAD查询,但没有得到正确的结果。

noneMatch

1 个答案:

答案 0 :(得分:1)

LEAD可以在设施上使用PARTITION BY
并且ORDER BY应该在日期字段上。

此外,最好开始使用JOIN语法。
旧的逗号语法在上个世纪已经过时了。

SELECT fac.FCLTY_NO, fac.CSR_MN, fac.CP1KVINS,
LEAD(fac.CP1KVINS, 1, 0) OVER (PARTITION BY fac.FCLTY_NO ORDER BY fac.CSR_MN) AS NEXT_CPIKVIN,
LEAD(fac.CP1KVINS, 1, 0) OVER (PARTITION BY fac.FCLTY_NO ORDER BY fac.CSR_MN) - fac.CP1KVINS AS DIFF_CP1KVIN
FROM USER9.WPO_VIN_VST_CLM_CY17_TO_DATE fac
JOIN DRBA.ADA_DEALER_T dealer 
  ON dealer.DEALER_NO = fac.FCLTY_NO 
WHERE dealer.CHANNEL_ELIG_CD = 'N'
  AND dealer.APPOINT_DT < '01JAN2018'
  AND dealer.TERM_DT = '31DEC9999'
ORDER BY fac.FCLTY_NO, fac.CSR_MN;

结果:

FCLTY_NO    CSR_MN          CP1KVINS    NEXT_CPIKVIN    DIFF_CP1KVIN
01016       01/01/2017      1060        1000            -60
01016       01/02/2017      1000        1070            70
01016       01/03/2017      1070        1070            0
01016       01/04/2017      1070        1060            -10
01016       01/05/2017      1060        1070            10
01016       01/06/2017      1070        1060            -10
01016       01/07/2017      1060        1050            -10
01016       01/08/2017      1050        1060            10
01016       01/09/2017      1060        1040            -20
01016       01/10/2017      1040        0               -1040