You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

逻辑说明

  1. all_relevant_dates:通过UNION合并两张表中所有与deposit_id关联的日期(交易日期+存款日期),自动去重避免重复日期。
  2. valid_date_pairs:过滤掉每个deposit_id早于其存款日期的无效记录(存款发生前不可能有该存款的交易或存款记录)。
  3. 最终关联查询:以valid_date_pairs为基础,分别左连接交易表和存款表,用COALESCE将未匹配到的usage和deposit_amount转为0,同时保留所有需要的日期和deposit_id。

执行上述SQL后,将得到你期望的结果集。

内容的提问来源于stack exchange,提问作者Sam Widjaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:10:05