Lista dat
Użyj funkcji generowania_series aby uzyskać listę liczb, które możesz dodać do daty, aby uzyskać listę dat:
SELECT CURRENT_DATE + s.a AS dates
FROM generate_series(0,14,7) as s(a);
Wynik:
dates
------------
2004-02-05
2004-02-12
2004-02-19
Obracanie
Druga część twojego pytania dotyczy przestawiania zestawu wyników – konwersji danych wierszowych na dane kolumnowe. PIVOT i UNPIVOT to ANSI, ale nie widzę ich jako obsługiwane przez PostgreSQL obecnie . Najbardziej konsekwentnie obsługiwanym sposobem przestawiania zapytania jest użycie funkcji agregujących:
SELECT t.account,
SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
SUM(t.amount) AS Balance
FROM (SELECT CURRENT_DATE + s.a AS dates
FROM generate_series(0,14,7) as s(a)) x
LEFT JOIN TRANSACTIONS y ON y.date = x.date
GROUP BY t.account
Kolumny dynamiczne
...oznacza dynamiczny SQL .