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

Sådan udfyldes manglende datoer i PostgreSQL ved hjælp af generate_series

Ofte skal vi udfylde manglende datoer i PostgreSQL ved at udfylde manglende rækker for disse datoværdier. Sådan udfylder du manglende datoer i PostgreSQL ved hjælp af funktionen gener_series.

Sådan udfyldes manglende datoer i PostgreSQL ved hjælp af generate_series

Her er trinene til at udfylde manglende datoer i PostgreSQL. Vi vil bruge gener_series i PostgreSQL til at udfylde manglende værdier.

Lad os sige, at du har følgende tabel salg(ordre_dato,udsalg)

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 Læs:Sådan beregnes median i PostgreSQL

Som du kan se i tabellen ovenfor, mangler der datoværdier i den, såsom 2., 3. april osv.

Hvis vi forsøger at plotte disse data på en graf, vil det ligne

Sådan en graf kan være vildledende, da den ikke viser kolonnehuller for manglende datoer.

Bonus Læs:Sådan beregnes glidende gennemsnit i PostgreSQL

For at udfylde manglende data i PostgreSQL skal vi oprette en 'hjælper' datoserietabel, der indeholder alle datoer mellem minimum og maksimum datoer i vores tabel, inklusive manglende datoværdier som rækker. Vi slutter os til dette hjælpebord med vores salg tabel.

Vi vil bruge gener_series i PostgreSQL til at generere datoserietabel. generer_serier funktionen genererer automatisk en fortsættende serie af tal og datoer, hvis du angiver min- og maksværdierne for din serie.

Her er et eksempel, hvor vi fortæller gener_series at generere en datoserie mellem minimum og maksimum datoer i vores tabel, inklusive manglende datoværdier som rækker.

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 Læs:Sådan importeres CSV-fil i PostgreSQL

Dernæst laver vi en LEFT join af hjælpetabellen med salg for at udfylde manglende datoer i 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

Når du har udfyldt manglende datoer i PostgreSQL, kan du bruge et rapporteringsværktøj til at plotte disse data på et søjlediagram eller dashboard og dele dem med dit team. Her er et eksempel på et søjlediagram, der viser daglige salg, oprettet ved hjælp af Ubiq.

Se forskellen i 2 diagrammer!

Hvis du vil oprette diagrammer, dashboards og rapporter fra PostgreSQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Tilføjelse af flere kolonner EFTER en specifik kolonne i MySQL

  2. SQLiteConstraintException-fejl vises efter start af hver aktivitet

  3. Initial array i funktion til at aggregere multi-dimensional array

  4. Sådan bruges NVL()-funktionen i Oracle