【发布时间】:2020-12-03 17:18:26
【问题描述】:
我正在尝试使用 accounts 表对我的查询 (accounts.provider = 'z') 应用过滤器。我目前的查询没有正确应用过滤器,正在添加完整的付款列表,无论提供者条件如何。我之所以使用表 x 来加入accounts 表,是因为表t 没有account_id 列来允许我将它加入accounts 表中。
这是我当前的查询
SELECT
distinct on (x.day) x.day,
coalesce(pending_payments,0)
from
(( SELECT day::date
FROM generate_series(timestamp '2017-03-13', current_date + interval '1 week', interval '1 day') day
) d
left JOIN (
SELECT date_trunc('day', payment_date)::date AS day,
sum(case when payment_amount > 0
and description not ilike '%credit%'
and state = 'pending'
then payment_amount end) as pending_payments
FROM payments
GROUP BY 1
) t USING (day) inner join payments on payments.payment_date = t.day) x
inner join accounts on accounts.id = x.account_id and accounts.provider = 'z'
where day <= current_date + interval '1 week'
and day >= current_date - interval'6 months'
ORDER BY x.day desc
感谢您的帮助
根据 cmets 中的建议更新了查询,但没有产生正确的结果(请参阅 cmets)。
SELECT
distinct on (t.day) t.day as day,
coalesce(pending_payments,0)
from
( SELECT day::date
FROM generate_series(timestamp '2017-03-13', current_date + interval '1 week', interval '1 day') day
) d
left JOIN (
SELECT date_trunc('day', t.payment_date)::date AS day,
sum(case when t.payment_amount > 0
and t.description not ilike '%credit%'
and t.state = 'success'
then t.payment_amount end) as pending_payments
FROM payments t
inner join payments p on p.payment_date = date_trunc('day', t.payment_date)::date
inner join accounts on accounts.id = p.account_id and accounts.provider = 'z'
where date_trunc('day', t.payment_date)::date <= current_date + interval '1 week'
and date_trunc('day', t.payment_date)::date >= current_date - interval'1 months'
GROUP BY 1
) t USING (day)
ORDER BY day desc
【问题讨论】:
-
是mysql还是PostgreSQL? ,,请删除错误的标签...
-
删除了不一致的数据库标签,请仅添加特定的数据库标签。
-
抱歉,这是postgresql
标签: sql postgresql join