从合并后的最大日期获取值

Get the values from the Max date after union

此查询有效,但我想看看是否有更多 optimize/shorter 方法来获得相同的结果。我想从 3 tables、TABLE_01、TABLE_02、TABLE_03 的联合中检索所有具有最大日期的数据。无论哪个 table 具有最新的 bill_date,我都想检索该 bill_date 的行。对于相同的 PID 和 bill_date.

,它将始终返回不止一行
SELECT T1.PID, T1.BILL_DATE, T2.COL3, T2.COL4, T2.COL5
FROM
    (
     SELECT T.PID, MAX(T.BILL_DATE)
     FROM 
       ( 
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0501
         GROUP BY 1,2,3,4,5
         UNION ALL
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0502
         GROUP BY 1,2,3,4,5
         UNION ALL
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0503
         GROUP BY 1,2,3,4,5
        ) T
     GROUP BY 1  
    ) T1

INNER JOIN

    ( SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
      UNION ALL
      SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
      UNION ALL
      SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
    ) T2

ON T1.PID = T2.PID
AND T1.BILL_DATE = T2.BILL_DATE

是的,QUALIFY 子句在这里派上用场。

SELECT * FROM 
( 
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0501
    GROUP BY 1,2,3,4,5
    UNION ALL
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0502
    GROUP BY 1,2,3,4,5
    UNION ALL
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0503
    GROUP BY 1,2,3,4,5
) T
QUALIFY RANK() OVER (PARTITION BY PID ORDER BY BILL_DATE DESC) = 1;

在每组 PID 中,将从 BILL_DATE 到最低的行分配一个排名。 QUALIFY ... = 1 将 select 排名最高 BILL_DATE.