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

Comment remplir les dates manquantes dans PostgreSQL à l'aide de generate_series

Souvent, nous devons remplir les dates manquantes dans PostgreSQL en remplissant les lignes manquantes pour ces valeurs de date. Voici comment remplir les dates manquantes dans PostgreSQL en utilisant la fonction generate_series.

Comment remplir les dates manquantes dans PostgreSQL à l'aide de generate_series

Voici les étapes pour remplir les dates manquantes dans PostgreSQL. Nous utiliserons generate_series dans PostgreSQL pour remplir les valeurs manquantes.

Disons que vous avez le tableau suivant sales(order_date,sale)

postgresql=# create table sales(order_date date,sale int);

postgresql=# insert into sales(order_date,sale) values('2020-04-01',212),
     ('2020-04-04',220),
     ('2020-04-05',120),
     ('2020-04-07',200),
     ('2020-04-08',222),
     ('2020-04-10',312),
     ('2020-04-11',225),
     ('2020-04-12',212);

postgresql=# select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-04-01 |  212 |
| 2020-04-04 |  220 |
| 2020-04-05 |  120 |
| 2020-04-07 |  200 |
| 2020-04-08 |  222 |
| 2020-04-10 |  312 |
| 2020-04-11 |  225 |
| 2020-04-12 |  212 |
+------------+------+

Lecture bonus :Comment calculer la médiane dans PostgreSQL

Comme vous pouvez le voir dans le tableau ci-dessus, il manque des valeurs de date telles que le 2, le 3 avril, etc.

Si nous essayons de tracer ces données sur un graphique, cela ressemblera à quelque chose comme

Un tel graphique peut être trompeur car il ne montre pas les espaces vides pour les dates manquantes.

Lecture bonus :Comment calculer la moyenne mobile dans PostgreSQL

Pour remplir les données manquantes dans PostgreSQL, nous devons créer une table de séries de dates "helper" qui contient toutes les dates entre les dates minimales et maximales dans notre table, y compris les valeurs de date manquantes sous forme de lignes. Nous rejoindrons cette table d'assistance avec nos ventes tableau.

Nous utiliserons generate_series dans PostgreSQL pour générer une table de séries de dates. generate_series La fonction génère automatiquement une série continue de nombres et de dates, si vous fournissez les valeurs min et max pour votre série.

Voici un exemple, où nous disons à generate_series de générer une série de dates entre les dates minimales et maximales dans notre table, y compris les valeurs de date manquantes sous forme de lignes.

postgres=# SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
           FROM   sales;

 order_date
------------
 2020-04-01
 2020-04-02
 2020-04-03
 2020-04-04
 2020-04-05
 2020-04-06
 2020-04-07
 2020-04-08
 2020-04-09
 2020-04-10
 2020-04-11
 2020-04-12

Lecture bonus :Comment importer un fichier CSV dans PostgreSQL

Ensuite, nous effectuons une jointure GAUCHE de la table d'assistance avec ventes pour remplir les dates manquantes dans PostgreSQL.

postgres=# SELECT x.order_date, t.sale
           FROM (
              SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
              FROM   sales
               ) x
           LEFT   JOIN sales t USING (order_date)
           ORDER  BY x.order_date;

 order_date | sale
------------+------
 2020-04-01 |  212
 2020-04-02 |
 2020-04-03 |
 2020-04-04 |  220
 2020-04-05 |  120
 2020-04-06 |
 2020-04-07 |  200
 2020-04-08 |  222
 2020-04-09 |
 2020-04-10 |  312
 2020-04-11 |  225
 2020-04-12 |  212

Après avoir rempli les dates manquantes dans PostgreSQL, vous pouvez utiliser un outil de création de rapports pour tracer ces données sur un graphique à barres ou un tableau de bord et les partager avec votre équipe. Voici un exemple de graphique à barres illustrant les ventes quotidiennes, créé à l'aide d'Ubiq.

Voyez la différence dans 2 graphiques !

Si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données PostgreSQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.