sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man fyller i saknade datum i PostgreSQL med generation_series

Ofta måste vi fylla i saknade datum i PostgreSQL genom att fylla i saknade rader för dessa datumvärden. Så här fyller du i saknade datum i PostgreSQL med funktionen generera_serier.

Så här fyller du i saknade datum i PostgreSQL med generation_series

Här är stegen för att fylla i saknade datum i PostgreSQL. Vi kommer att använda gener_series i PostgreSQL för att fylla i saknade värden.

Låt oss säga att du har följande tabell försäljning(orderdatum, rea)

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:Hur man beräknar median i PostgreSQL

Som du kan se i tabellen ovan saknas det datumvärden i den som 2, 3 april, etc.

Om vi ​​försöker plotta dessa data på en graf kommer det att se ut ungefär som

En sådan graf kan vara missvisande eftersom den inte visar kolumnluckor för saknade datum.

Bonus Läs:Hur man beräknar glidande medelvärde i PostgreSQL

För att fylla i saknad data i PostgreSQL måste vi skapa en "hjälpar" datumserietabell som innehåller alla datum mellan lägsta och högsta datum i vår tabell, inklusive saknade datumvärden som rader. Vi kommer att gå med i det här hjälpbordet med vår försäljning bord.

Vi kommer att använda gener_series i PostgreSQL för att generera datumserietabell. generera_serier funktionen genererar automatiskt en kontinuerlig serie med siffror och datum, om du anger min- och maxvärden för din serie.

Här är ett exempel där vi säger till gener_series att generera en datumserie mellan lägsta och högsta datum i vår tabell, inklusive saknade datumvärden som rader.

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:Hur man importerar CSV-fil i PostgreSQL

Därefter gör vi en VÄNSTER koppling av hjälptabell med försäljning för att fylla i saknade datum 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 fyllt i saknade datum i PostgreSQL kan du använda ett rapporteringsverktyg för att plotta denna data på ett stapeldiagram eller instrumentpanel och dela den med ditt team. Här är ett exempel på ett stapeldiagram som visar daglig försäljning, skapad med Ubiq.

Se skillnaden i 2 diagram!

Om du vill skapa diagram, instrumentpaneler och rapporter från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. PostgreSQL returnerar en funktion med en anpassad datatyp

  2. FORALL-uttalande med VALUES-OF Bound-klausul i Oracle Database

  3. Hur man installerar MySQL med phpMyAdmin på Ubuntu 12.04

  4. Hur man får månaden från ett datum i MySQL