Списък с дати
Използвайте функцията generate_series за да получите списък с числа, които можете да добавите към дата, за да получите списък с дати:
SELECT CURRENT_DATE + s.a AS dates
FROM generate_series(0,14,7) as s(a);
Резултат:
dates
------------
2004-02-05
2004-02-12
2004-02-19
Завъртане
Последната част от въпроса ви се занимава с завъртане на набора от резултати - преобразуване на редови данни в колонни данни. PIVOT и UNPIVOT са ANSI, но не ги виждам като поддържани от PostgreSQL в момента . Най-последователно поддържаният начин за завъртане на заявка е използването на агрегатни функции:
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
Динамични колони
...означава динамичен SQL .