在同一表格中返回当月工资和上月工资

时间:2018-08-06 03:57:03

标签: sql-server plsql peoplesoft

我的任务是准备从运行控制页面生成的报告,并检索当前月薪和上月薪。在该页面中,用户将选择他们想要的cal_id,例如,在这种情况下,用户选择cal id = FEB。假设下表名为table_salary

emplid | cal_id | salary | pymt_date
101    | JAN    | 10000  | 2018-01-01
101    | FEB    | 15000  | 2018-02-01 

我的预期输出是

emplid | cur_sal| prev_sal 
101    | 15000  | 10000  

到目前为止,我所做的如下所示

SELECT 
    A.EMPLID, A.SALARY AS CUR_SAL, B.SALARY AS PREV_SAL
FROM  
    TABLE_SALARY A 
LEFT OUTER JOIN 
    TABLE_SALARY B ON A.EMPLID AND B.EMPLID
                   AND A.CAL_ID = B.CAL_ID
                   AND B.PYMT_DT = (SELECT MAX(B1.PYMT_DT)
                                    FROM TABLE_SALARY B1
                                    WHERE B1.EMPLID = B.EMPLID
                                      AND B1.PYMT_DT >= DATEADD(mm, DATEDIFF(mm, 0, B.PYMT_DT) - 1, 0)
                                      AND B1.PYMT_DT < DATEADD(mm, DATEDIFF(mm, 0, PYMT_DT), 0)) 

但是上面的SQL没有返回预期的输出。

有人知道如何实现我的预期输出吗?

2 个答案:

答案 0 :(得分:1)

使用窗口函数检索排序集中的上一行。我认为应该可以。

SELECT TOP 1
    EMPLID, SALARY AS CUR_SAL, LEAD(SALARY, 1, 0) OVER (ORDER BY PYMT_DT DESC) AS PREV_SAL
FROM
    TABLE_SALARY
ORDER BY
    PYMT_DT DESC

答案 1 :(得分:1)

应该是这样 使用Lead代替Lag

spark = SparkSession.builder.config(conf=conf).getOrCreate()