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

Come riempire le date mancanti in PostgreSQL usando generate_series

Spesso, abbiamo bisogno di riempire le date mancanti in PostgreSQL riempiendo le righe mancanti per quei valori di data. Ecco come inserire le date mancanti in PostgreSQL usando la funzione generate_series.

Come riempire le date mancanti in PostgreSQL usando generate_series

Ecco i passaggi per riempire le date mancanti in PostgreSQL. Useremo generate_series in PostgreSQL per riempire i valori mancanti.

Supponiamo che tu abbia la seguente tabella 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 |
+------------+------+

Bonus Leggi:Come calcolare la mediana in PostgreSQL

Come puoi vedere nella tabella sopra, ci sono valori di data mancanti come 2, 3 aprile, ecc.

Se proviamo a tracciare questi dati su un grafico, assomiglierà a

Tale grafico può essere fuorviante in quanto non mostra spazi vuoti nelle colonne per le date mancanti.

Bonus Leggi:Come calcolare la media mobile in PostgreSQL

Per riempire i dati mancanti in PostgreSQL, dobbiamo creare una tabella di serie di date "helper" che contenga tutte le date comprese tra le date minime e massime nella nostra tabella, inclusi i valori di data mancanti come righe. Ci uniremo a questo tavolo di supporto con le nostre vendite tabella.

Useremo generate_series in PostgreSQL per generare la tabella delle serie di date. genera_serie la funzione genera automaticamente una serie continua di numeri e date, se fornisci i valori minimo e massimo per la tua serie.

Ecco un esempio, in cui diciamo a generate_series di generare una serie di date tra le date minime e massime nella nostra tabella, inclusi i valori di data mancanti come righe.

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 Lettura:come importare file CSV in PostgreSQL

Successivamente, eseguiamo un join SINISTRO della tabella helper con vendite per riempire le date mancanti in 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

Dopo aver compilato le date mancanti in PostgreSQL, puoi utilizzare uno strumento di reporting per tracciare questi dati su un grafico a barre o dashboard e condividerli con il tuo team. Ecco un esempio di grafico a barre che mostra le vendite giornaliere, creato utilizzando Ubiq.

Vedi la differenza in 2 grafici!

Se vuoi creare grafici, dashboard e report dal database PostgreSQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.