PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como gerar uma tabela virtual para gerar uma sequência de datas no PostgreSQL?

Lista de datas


Use a função gerar_series para obter uma lista de números que você pode adicionar a uma data para obter uma lista de datas:
SELECT CURRENT_DATE + s.a AS dates 
  FROM generate_series(0,14,7) as s(a);

Resultado:
dates
------------
2004-02-05
2004-02-12
2004-02-19

Pivotar


A última parte da sua pergunta trata de dinamizar o conjunto de resultados - convertendo dados de linha em dados de coluna. PIVOT e UNPIVOT são ANSI, mas não os vejo como suportado pelo PostgreSQL atualmente . O meio mais consistente de dinamizar uma consulta é usar funções agregadas:
   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

Colunas dinâmicas


...significa SQL dinâmico .