【问题标题】:Join table with filtering by date按日期过滤的联接表
【发布时间】:2019-08-03 19:51:52
【问题描述】:

我有 2 张桌子。第一个 - 钱包,第二个 - 钱包历史。现在我可以根据每个钱包的所有已完成存款/取款的总和进行选择。

Sql 代码如下所示:

SELECT w.*, wh.deposit, wh2.withdrawal, wh3.pending
FROM wallets w
LEFT JOIN (
    SELECT wallet_id, SUM(amount) deposit
    FROM wallet_histories
    WHERE type = 'Deposit'
        AND status = 'Completed'
        AND timestamp BETWEEN '2019-08-02 00:00:00+00' AND '2019-08-03 00:00:00+00'
    GROUP BY wallet_id
) wh ON w.id = wh.wallet_id
LEFT JOIN (
    SELECT wallet_id, SUM(amount) withdrawal
    FROM wallet_histories
    WHERE type = 'Withdrawal'
        AND status = 'Completed'
        AND timestamp BETWEEN '2019-08-02 00:00:00+00' AND '2019-08-03 00:00:00+00'
    GROUP BY wallet_id
) wh2 ON w.id = wh2.wallet_id
LEFT JOIN (
    SELECT wallet_id, SUM(amount) pending
    FROM wallet_histories
    WHERE status = 'Pending'
    GROUP BY wallet_id
) wh3 ON w.id = wh3.wallet_id

接下来,我需要进行此选择,但通过表钱包中的字段 enabled_at 进行过滤。 我应该在 WHERE 中再做一个条件: AND timestamp >= w.enabled_at 但是出错了

LINE 10:       AND timestamp >= w.enabled_at
                                ^
HINT:  There is an entry for table "w", but it cannot be referenced from this part of the query.

我怎样才能避免这个错误(也许完全重建查询)? 提前谢谢你。

【问题讨论】:

  • 样本数据、期望的结果以及对您想要完成的目标的解释都会有所帮助!

标签: sql postgresql left-join


【解决方案1】:

您需要在每个子查询中添加条件。聚合的结果没有enabled_at,因此该列在外部查询中不可用——在onwhere 子句中。

也就是说,您可以使用条件聚合大大简化查询:

SELECT wallet_id,
       SUM(amount) FILTER (WHERE type = 'Deposit') as deposit
       SUM(amount) FILTER (WHERE type = 'Withdrawal') as withdrawal,
       SUM(amount) FILTER (WHERE status = 'Pending') as pending
FROM wallet_histories
WHERE (type IN ('Deposit', 'Withdrawal') AND
       status = 'Completed' AND
       timestamp >= '2019-08-02' AND
       timestamp < '2019-08-03'
      ) OR
      status = 'Pending'
GROUP BY wallet_id;

这可能更容易添加额外的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 2020-04-16
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多