PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como preencher datas ausentes no PostgreSQL usando generate_series


Muitas vezes, precisamos preencher datas ausentes no PostgreSQL preenchendo linhas ausentes para esses valores de data. Veja como preencher datas ausentes no PostgreSQL usando a função generate_series.


Como preencher datas ausentes no PostgreSQL usando generate_series


Aqui estão os passos para preencher datas faltantes no PostgreSQL. Usaremos generate_series no PostgreSQL para preencher os valores ausentes.

Digamos que você tenha a seguinte tabela vendas(data_pedido,venda)
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 |
+------------+------+

Bônus de leitura:Como calcular a mediana no PostgreSQL



Como você pode ver na tabela acima, há valores de data ausentes, como 2, 3 de abril, etc.

Se tentarmos plotar esses dados em um gráfico, será algo como



Esse gráfico pode ser enganoso, pois não mostra lacunas de coluna para datas ausentes.

Bônus de leitura:Como calcular a média móvel no PostgreSQL



Para preencher dados ausentes no PostgreSQL, precisamos criar uma tabela de série de datas 'auxiliar' que contenha todas as datas entre as datas mínimas e máximas em nossa tabela, incluindo valores de datas ausentes como linhas. Juntaremos esta mesa auxiliar com nossas vendas tabela.

Usaremos generate_series no PostgreSQL para gerar a tabela de séries de datas. generate_series A função gera automaticamente uma série contínua de números e datas, se você fornecer os valores mínimo e máximo para sua série.

Aqui está um exemplo, onde dizemos a generate_series para gerar uma série de datas entre as datas mínimas e máximas em nossa tabela, incluindo valores de data ausentes como linhas.
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

Bônus de leitura:Como importar arquivo CSV no PostgreSQL



Em seguida, fazemos uma junção LEFT da tabela auxiliar com vendas para preencher datas faltantes no 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

Depois de preencher as datas faltantes no PostgreSQL, você pode usar uma ferramenta de relatório para plotar esses dados em um gráfico de barras ou painel e compartilhá-los com sua equipe. Aqui está um exemplo de um gráfico de barras que mostra as vendas diárias, criado usando o Ubiq.



Veja a diferença em 2 gráficos!

Se você deseja criar gráficos, painéis e relatórios do banco de dados PostgreSQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.