2017-07-31 639 views
0

我有两张表:“debt_period”和“payments”。我需要从他们那里看一看。有一个时期可以是几次支付的情况。因此,在这种情况下,我必须将付款金额汇总在一列中,并在另一列中列出逗号分隔的日期。 我使用string_agg(to_char(p.payment_date,'DD.MM.YYYY')和窗口函数。 这工作正常。问题是字符串中的日期不是按时间顺序排列的。我如何订购它们?如何在“string_agg”中为窗口函数(postgresql)排序字符串?

CREATE MATERIALIZED VIEW base.v_period_payments AS 
SELECT DISTINCT 
dp.card_id, 
dp.year, 
dp.month, 
dp.debt_amount, 
string_agg(to_char(p.payment_date, 'DD.MM.YYYY'), ', ') OVER (PARTITION BY p.period_id) AS 
pay_dates 
FROM base.debt_period dp 
LEFT JOIN base.payments p on (p.period_id = dp.id) 
WHERE dp.card_id = '№001137' 
ORDER BY dp.card_id 
+0

@a_horse_with_no_name有一个错误:[0A000]错误:总ORDER BY不是为窗口函数实现 –

回答

0

尝试用用这个:

变化

LEFT JOIN base.payments p on (p.period_id = dp.id) 

通过

LEFT JOIN (select * from base.payments order by period_id,payment_date) p on (p.period_id = dp.id) 

最终结果

CREATE MATERIALIZED VIEW base.v_period_payments AS 
SELECT DISTINCT 
dp.card_id, 
dp.year, 
dp.month, 
dp.debt_amount, 
string_agg(to_char(p.payment_date, 'DD.MM.YYYY'), ', ') OVER (PARTITION BY p.period_id) AS 
pay_dates 
FROM base.debt_period dp 
LEFT JOIN (select * from base.payments order by period_id,payment_date) p on (p.period_id = dp.id) 
WHERE dp.card_id = '№001137' 
ORDER BY dp.card_id 
+0

大,谢谢! –

+0

还有一个问题。没有条件'WHERE dp.card_id ='№001137''查询无法正常工作。你能解释一下为什么以及如何处理它? –

+0

你可以寄给我这两个表的脚本 因此,我可以帮助你更多 因为我认为他们没有问题,如果你删除的地方 –

相关问题