内部加入两个选择 sql

inner join with two selects sql

我正在尝试实现一个内部联接来比较两个表的值,但是由于某种原因失败并且查询返回零列。

我有两个表 security 和 security_his 并试图在列 SECURITY_ID 和 INVESTMENT_OBJECTIVE 上连接它们。查询如下

SELECT *
FROM SECURITY origin
INNER JOIN (
    SELECT *
    FROM SECURITY_HIS t2
    WHERE DATED = (
            SELECT MAX(DATED)
            FROM SECURITY_HIS t1
            WHERE t1.SECURITY_ID = t2.SECURITY_ID
            )
    ) history ON origin.SECURITY_ID = history.SECURITY_ID
    AND origin.INVESTMENT_OBJECTIVE = history.INVESTMENT_OBJECTIVE;

您在最内层的查询中没有 GROUP BY,因此只返回一个在整个 table 中达到最大值的值。但是,您的查询也可以简化以便于理解:

SELECT origin.*, history.Dated
FROM SECURITY origin
INNER JOIN (
    SELECT
        SECURITY_ID,
        INVESTMENT_OBJECTIVE,
        MaxDated = MAX(DATED)
    FROM SECURITY_HIS t2
    GROUP BY
        SECURITY_ID,
        INVESTMENT_OBJECTIVE
) history ON origin.SECURITY_ID          = history.SECURITY_ID
         AND origin.INVESTMENT_OBJECTIVE = history.INVESTMENT_OBJECTIVE
WITH cte as (
    SELECT S.*,
           row_number() over 
               (partition by S.SECURITY_ID ORDER BY SH.DATED DESC)
    FROM SECURITY S
    JOIN SECURITY_HIS SH
      ON S.SECURITY_ID = SH.SECURITY_ID
     AND S.INVESTMENT_OBJECTIVE = SH.INVESTMENT_OBJECTIVE
)
SELECT *
FROM cte
WHERE rn = 1