db2 如何根据日期显示当前信息库

k4aesqcs  于 12个月前  发布在  DB2
关注(0)|答案(3)|浏览(179)

我的SQL脚本用于显示公司、员工编号、姓氏、名字、当前工作和当前工资。
要达到当前的东西意味着有涉及的日期。
如何显示该员工的当前职务和工资?
EMP(基表)
| empno| LastName| FirstName|
| --|--|--|
| 111 |詹姆斯|勒布朗|
| 222 |科比|科比|
| 333 |约旦|迈克尔|
| 444 |咖喱|斯蒂芬|
dept_job视图
| 公司|empno| effdate|工作|工资|
| --|--|--|--|--|
| 湖人| 111 |2015年4月16日|助理|一千五百|
| 湖人| 111 |16年2月2日|教练|四千|
| 湖人| 222 |17年7月22日|分析师|三千|
| 公牛| 333 |2017年4月12日|书记|五千|
| 公牛| 333 |2018年7月28日|经理|五千|
| 战士| 444 |10/04/19|厨师|二千|
我在生效日期(effdate)上使用MAX()来获取最新的工作和薪水。但它显示了过去的工作和薪水。

SELECT z.company, em.empno, em.lastname, em.firstname, z.job, z.salary
FROM emp em
JOIN ( SELECT dj.company, dj.empno, dj.effdate, dj.job, dj.salary
    FROM dept_job dj
    JOIN (SELECT company, empno, MAX(effdate) AS maxefffdate
        FROM dept_job
        GROUP BY company, empno) pe
    ON dj.empno = pc.empno AND dj.effdate = pe.maxeffdate) z
ON em.empno = z.empno
ORDER BY company, empno;

字符串
结果(错误)
| 公司|empno| LastName| FirstName|工作|工资|
| --|--|--|--|--|--|
| 湖人| 111 |詹姆斯|勒布朗|助理|一千五百|
| 湖人| 111 |詹姆斯|勒布朗|教练|四千|
| 湖人| 222 |科比|科比|分析师|三千|
| 公牛| 333 |约旦|迈克尔|书记|五千|
| 公牛| 333 |约旦|迈克尔|经理|五千|
| 战士| 444 |咖喱|斯蒂芬|厨师|二千|
我想要的
| 公司|empno| LastName| FirstName|工作|工资|
| --|--|--|--|--|--|
| 湖人| 111 |詹姆斯|勒布朗|教练|四千|
| 湖人| 222 |科比|科比|分析师|三千|
| 公牛| 333 |约旦|迈克尔|经理|五千|
| 战士| 444 |咖喱|斯蒂芬|厨师|二千|

busg9geu

busg9geu1#

SELECT dj.company
    ,em.empno
    ,em.lastname
    ,em.firstname
    ,dj.job
    ,dj.salary
FROM emp em
JOIN dept_job dj ON em.empno = dj.empno
JOIN (
    SELECT empno
        ,MAX(effdate) AS maxefffdate
    FROM dept_job
    GROUP BY empno
    ) z
ON dj.empno = z.empno
    AND dj.effdate = z.maxefffdate
ORDER BY company
    ,empno;

字符串

uhry853o

uhry853o2#

SELECT z.company, em.empno, em.lastname, em.firstname, z.job, z.salary
FROM emp em
JOIN (
    SELECT dj.company, dj.empno,
        MAX(dj.effdate) OVER (
            PARTITION BY dj.company, dj.empno, dj.job, dj.salary
            ) AS maxeffdate,
        dj.job, dj.salary
    FROM dept_job dj ) z
ON em.empno = z.empno
ORDER BY company, empno;

字符串

ie3xauqp

ie3xauqp3#

在WHERE子句中使用子选择,它只返回最新的日期,因此只给你最新的记录。

SELECT dj.company, e.empno, e.lastname, e.firstname, dj.job
FROM emp e
JOIN dept_job dj ON e.empno = dj.empno
WHERE dj.effdate = (
  SELECT MAX(effdate)
  FROM dept_job
  WHERE empno = e.empno
)
ORDER BY e.empno;

字符串

相关问题