PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come generare una tabella virtuale per generare una sequenza di date in PostgreSQL?

Elenco date

Usa la funzione genera_series per ottenere un elenco di numeri che puoi aggiungere a una data per ottenere un elenco di date:

SELECT CURRENT_DATE + s.a AS dates 
  FROM generate_series(0,14,7) as s(a);

Risultato:

dates
------------
2004-02-05
2004-02-12
2004-02-19

Pivota

L'ultima parte della tua domanda riguarda la rotazione del set di risultati, ovvero la conversione dei dati delle righe in dati colonnari. PIVOT e UNPIVOT sono ANSI, ma non li vedo come supportati da PostgreSQL attualmente . Il mezzo più coerentemente supportato per ruotare una query consiste nell'utilizzare le funzioni aggregate:

   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

Colonne dinamiche

...significa SQL dinamico .