2017-07-31 66 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

你可以寄給我這兩個表的腳本 因此,我可以幫助你更多 因爲我認爲他們沒有問題,如果你刪除的地方 –

相關問題