sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo generar una tabla virtual para generar una secuencia de fechas en PostgreSQL?

Lista de fechas

Use la función generate_series para obtener una lista de números que puede agregar a una fecha para obtener una lista de fechas:

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

La última parte de su pregunta se trata de girar el conjunto de resultados:convertir datos de fila en datos de columna. PIVOT y UNPIVOT son ANSI, pero no los veo como compatibles con PostgreSQL actualmente . El medio admitido de manera más consistente para pivotar una consulta es usar funciones 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

Columnas dinámicas

...significa SQL dinámico .