Presto SQL关联双表:仅在对应日期展示第二表字段值
解决方案
要实现你需要的结果,核心是先构建包含所有目标日期与对应deposit_id的基础数据集,再分别关联交易表和存款表,用COALESCE填充空值为0。以下是Presto SQL实现代码:
WITH all_relevant_dates AS ( -- 收集每个deposit_id的交易日期和存款日期 SELECT deposit_id, date AS event_date FROM trx UNION SELECT deposit_id, deposit_date AS event_date FROM deposit ), valid_date_pairs AS ( -- 确保每个deposit_id的日期不早于其存款日期 SELECT ard.deposit_id, ard.event_date FROM all_relevant_dates ard JOIN deposit d ON ard.deposit_id = d.deposit_id WHERE ard.event_date >= d.deposit_date ) SELECT vdp.event_date AS date, COALESCE(t.usage, 0) AS usage, vdp.deposit_id, COALESCE(d.deposit_amount, 0) AS deposit_amount FROM valid_date_pairs vdp LEFT JOIN trx t ON vdp.deposit_id = t.deposit_id AND vdp.event_date = t.date LEFT JOIN deposit d ON vdp.deposit_id = d.deposit_id AND vdp.event_date = d.deposit_date ORDER BY date, deposit_id;
逻辑说明
all_relevant_dates:通过UNION合并两张表中所有与deposit_id关联的日期(交易日期+存款日期),自动去重避免重复日期。valid_date_pairs:过滤掉每个deposit_id早于其存款日期的无效记录(存款发生前不可能有该存款的交易或存款记录)。- 最终关联查询:以
valid_date_pairs为基础,分别左连接交易表和存款表,用COALESCE将未匹配到的usage和deposit_amount转为0,同时保留所有需要的日期和deposit_id。
执行上述SQL后,将得到你期望的结果集。
内容的提问来源于stack exchange,提问作者Sam Widjaja
相关产品推荐
相关产品推荐

