sql >> Database >  >> RDS >> PostgreSQL

Ontbrekende datums in PostgreSQL invullen met behulp van gene_series

Vaak moeten we ontbrekende datums in PostgreSQL invullen door ontbrekende rijen voor die datumwaarden in te vullen. Hier leest u hoe u ontbrekende datums in PostgreSQL invult met behulp van de functie create_series.

Ontbrekende datums in PostgreSQL invullen met behulp van generation_series

Hier zijn de stappen om ontbrekende datums in PostgreSQL in te vullen. We zullen Genereer_series in PostgreSQL gebruiken om ontbrekende waarden in te vullen.

Stel dat u de volgende tabel sales(order_date,sale) . heeft

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 |
+------------+------+

Bonus lezen:hoe de mediaan te berekenen in PostgreSQL

Zoals je in de bovenstaande tabel kunt zien, ontbreken er datumwaarden zoals 2, 3 april, enz.

Als we proberen deze gegevens in een grafiek te plotten, ziet het er ongeveer zo uit:

Zo'n grafiek kan misleidend zijn omdat er geen kolomhiaten worden weergegeven voor ontbrekende datums.

Bonus lezen:voortschrijdend gemiddelde berekenen in PostgreSQL

Om ontbrekende gegevens in PostgreSQL in te vullen, moeten we een 'helper'-datumreekstabel maken die alle datums tussen minimum- en maximumdatums in onze tabel bevat, inclusief ontbrekende datumwaarden als rijen. We zullen aan deze helpertafel deelnemen met onze verkoop tafel.

We zullen Genereer_series in PostgreSQL gebruiken om een ​​datumreekstabel te genereren. generate_series functie genereert automatisch een doorlopende reeks getallen en datums, als u de min en max waarden voor uw reeks opgeeft.

Hier is een voorbeeld, waarbij we generator_series vertellen om een ​​datumreeks te genereren tussen minimum- en maximumdatums in onze tabel, inclusief ontbrekende datumwaarden als rijen.

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

Bonus Lezen:CSV-bestand importeren in PostgreSQL

Vervolgens doen we een LEFT join of helper table met sales om ontbrekende datums in PostgreSQL in te vullen.

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

Nadat u ontbrekende datums in PostgreSQL hebt ingevuld, kunt u een rapportagetool gebruiken om deze gegevens in een staafdiagram of dashboard te plotten en met uw team te delen. Hier is een voorbeeld van een staafdiagram dat de dagelijkse verkoop toont, gemaakt met Ubiq.

Zie het verschil in 2 grafieken!

Als u grafieken, dashboards en rapporten wilt maken vanuit de PostgreSQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.

  1. Wat doet SUBSIDIEGEBRUIK OP SCHEMA precies?

  2. PostgreSQL-fout:relatie bestaat al

  3. De achtergrondkleur van een formulier wijzigen in Access 2016

  4. Online schema-upgrade in MySQL Galera-cluster met behulp van de RSU-methode