PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment générer une table virtuelle pour générer une séquence de dates dans PostgreSQL ?

Liste des dates

Utilisez la fonction generate_series pour obtenir une liste de nombres que vous pouvez ajouter à une date afin d'obtenir une liste de dates :

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

Résultat :

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

Pivoter

La dernière partie de votre question traite du pivotement de l'ensemble de résultats - conversion des données de ligne en données de colonne. PIVOT et UNPIVOT sont ANSI, mais je ne les vois pas comme supporté par PostgreSQL actuellement . Le moyen le plus systématiquement pris en charge pour faire pivoter une requête consiste à utiliser des fonctions d'agrégation :

   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

Colonnes dynamiques

...signifie SQL dynamique .