【发布时间】: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