LAG 函数在联接中使用时无法捕获以前的记录信息

LAG function unable to capture the previous record information when used in join

提问人:VB IN 提问时间:11/10/2023 最后编辑:Dale KVB IN 更新时间:11/11/2023 访问量:40

问:

我有两张表:

Employee:

员工 电话号码 开始日期 结束日期 部门 部门名称
50 5478765 12 1月23 29 1月2023 5 物理
50 8756544 29 1月23 12月 31, 9999 6 化学

EmployeeSalary:

员工 工资 开始日期 结束日期 部门
50 5000000 12 1月23 12月 31, 9999 6

我想加入这两个表,从表中我需要工资信息,而从表中,我需要最后一个电话号码,即在 2023 年 1 月 12 日和 2023 年 1 月 29 日期间输入的电话号码电话号码 - > 5478765 和当前部门名称。EmployeeSalaryEmployee

我正在连接这两个表并使用函数提取以前的电话号码。但是,当它加入使用并且不显示以前的电话号码时。LAGEmployeeIDDepartmentNumber

我需要这样的输出:

员工 工资 开始日期 结束日期 部门 电话号码 部门名称
50 5000000 12 1月23 12月 31, 9999 5 5478765 化学
sql-server 联接 滞后

评论

0赞 Thom A 11/10/2023
那么你的问题是什么......?“我需要”不是一个问题。解决问题的困难是什么?你在尝试什么?为什么他们不工作?
0赞 Thom A 11/10/2023
为什么在你的预期结果中有一个值?Dept5

答:

0赞 Cetin Basoz 11/10/2023 #1
SELECT es.Employee,
       Salary,
       es.StartDate,
       es.EndDate,
       prevDept,
       prevPhone,
       DeptName
FROM EmployeeSalary AS es
    INNER JOIN
    (
        SELECT Employee,
               Dept,
               DeptName,
               LAG(PhoneNum) OVER (PARTITION BY Employee ORDER BY StartDate) prevPhone,
               LAG(Dept) OVER (PARTITION BY Employee ORDER BY StartDate) prevDept
        FROM employee
    ) AS e
        ON e.Employee = es.Employee
           AND e.Dept = es.Dept;

员工 工资 开始日期 结束日期 上一页部门 上一篇手机 部门名称
50 5000000 2023-01-12 9999-12-31 5 5478765 化学

DBFiddle 演示

2赞 John Cappelletti 11/10/2023 #2

如果员工有两个以上的角色,则为另一种选择。

Select E.Employee
      ,S.Salary
      ,StartDate = E.D1
      ,EndDate   = E.D2
      ,E.Dept
      ,E.DeptName
      ,E.[Phone Num]
 From  (
        Select *
              ,D1 = min(StartDate) over (partition by Employee)
              ,D2 = max(EndDate) over (partition by Employee)
              ,RN = row_number() over(partition by Employee order by EndDate desc)
         from Employee
        ) E
 Join EmployeeSalary S on  E.Employee= S.Employee 
                       and E.EndDate = S.EndDate
                       and E.RN = 1

结果

Employee    Salary   StartDate   EndDate     Dept   DeptName    Phone Num
50          5000000  2023-01-12  9999-12-31  6      Chemistry   8756544

评论

1赞 VB IN 11/13/2023
感谢约翰的回复。Cetin的回答更接近我想要的答案。