从合并后的最大日期获取值
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.
此查询有效,但我想看看是否有更多 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.