使用包含 GROUP BY 子句的 table 连接重写查询

Rewriting query with table join containing GROUP BY clause

是否可以重写以下查询

SELECT      CT.GROUP, CT.EMP_ID, HT.EFF_DT
FROM        CURR_TABLE CT
JOIN        (SELECT     GROUP, EMP_ID, MAX(EFF_DT) AS EFF_DT
            FROM        HIST_TABLE
            WHERE       STAT = 'A' 
            GROUP BY    GROUP, EMP_ID) HT ON CT.GROUP = HT.GROUP AND 
            CT.EMPID = HT.EMP_ID
WHERE       CT.GROUP = :1
AND         CT.EMP_ID = :2

在某种程度上类似于 CROSS JOIN 风格?

SELECT table1.column1, table2.column2...
FROM  table1, table2 [, table3 ]

原因是我想在Peoplesoft中创建这样的查询,而以上只能通过用group by子句为选择创建一个单独的视图来实现。我只想在一个查询中执行此操作而不创建其他视图。

您可以尝试将查询编写为具有聚合的单级连接:

SELECT
    CT.GROUP,
    CT.EMP_ID,
    MAX(HT.EFF_DT) AS EFF_DT
FROM CURR_TABLE CT
LEFT JOIN HIST_TABLE HT
    ON CT.GROUP = HT.GROUP AND
       CT.EMPID = HT.EMP_ID AND
       HT.STAT = 'A'
WHERE
    CT.GROUP = :1 AND
    CT.EMP_ID = :2
GROUP BY
    CT.GROUP,
    CT.EMP_ID;

请注意 GROUP 是一个保留的 SQL 关键字,您可能必须用双引号将其转义才能使此查询(或您问题中的查询)在 Oracle 上运行。