从符合条件的加入 table 中获取最新数据

Get most recent data from joined table with condition

我有这个查询:

SELECT V2.EMPID, V2.PDATE1, T3.JOB_POSITION_NM
  FROM USER_VIEW V2
       JOIN
       (SELECT EMPID, JOB_POSITION_NM, EFFDT
          FROM (  SELECT A.EMPID, B.JOB_POSITION_NM, A.EFFDT
                    FROM T_EMP A
                         JOIN T_JOB_MASTER B
                            ON A.JOB_POSITION = B.JOB_POSITION
                ORDER BY EFFDT DESC)) T3
          ON     T3.EMPID = V2.EMPID
             AND TO_CHAR (T3.EFFDT, 'YYYY-MM-DD') < TO_CHAR (V2.P_DATE1, 'YYYY-MM-DD')

示例数据如下:

User_View V2

empid | pdate1
--------------
EM001 | 2021-12-01

T3

empid | job_position_nm | effdt
--------------------------------
EM001 | Operator        | 2016-06-12
EM001 | Sub Team Leader | 2018-10-01
EM001 | Team Leader 1   | 2020-07-01
EM001 | Team Leader 2   | 2022-01-03

但是由于 T3 查询有多个 EFFDT 数据小于 P_DATE1 它 returns 结果上的多行。 我想要 T3 上的 WHERE ROWNUM = 1 之类的东西来显示查询的单个结果。

有任何解决方法来实现类似的行为吗?谢谢

使用 CTE 和 row_number 分析函数(可能是 rank,但是 - 看起来你最多想得到一行作为结果)。

此外,比较日期,不要将它们转换为字符串然后再比较这些字符串。你为什么要这样做?

with temp as
  (select a.empid, b.job_position_nm, a.effdt,
     row_number() over (order by a.effdt desc) rn
   from t_emp a join t_job_master b on a.job_position = b.job_position
  )
select v2.empid, v2.pdate1, t.job_position_nm
from user_view v2 join temp t on t.empid = v2.empid
  and t.effdt < v2.p_date1
  and t.rn = 1;