【发布时间】:2023-01-12 05:29:38
【问题描述】:
尝试进行以下工作:
-
T1:取id per dt,其中name = A是most recent by load_id- 在 23 年 1 月 5 日通知 2 条记录,其中 load_id 为 2 和 3 => 采用 load_id = 3
-
T2:并显示对应的id per dt for each param行,最近的load_id- 仅注意 load_id = 13 保留在 05-Jan-23
-
T2:如果日期现在在T1可用,请保留T2行匹配最后已知的id
小提琴:https://dbfiddle.uk/-JO16GSj
我的 SQL 似乎有点乱。可以简化吗?
SELECT t2.dt, t2.param, t2.load_id, t2.id FROM
(SELECT
dt,
param,
load_id,
MAX(load_id) OVER (PARTITION BY dt, param) AS max_load_id,
id
FROM table2) t2
LEFT JOIN
(SELECT * FROM
(SELECT
dt,
id,
load_id,
MAX(load_id) OVER (PARTITION BY dt) AS max_load_id
FROM table1
WHERE name = 'A') t1_prep
WHERE t1_prep.load_id = t1_prep.max_load_id) t1
ON t1.dt = t2.dt and t1.id = t2.id
WHERE t2.load_id = t2.max_load_id
ORDER BY 1, 2
【问题讨论】: