sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo completar las fechas que faltan en PostgreSQL usando generar_series

A menudo, necesitamos completar las fechas que faltan en PostgreSQL completando las filas que faltan para esos valores de fecha. Aquí se explica cómo completar las fechas que faltan en PostgreSQL usando la función generate_series.

Cómo completar fechas faltantes en PostgreSQL usando generate_series

Estos son los pasos para completar las fechas que faltan en PostgreSQL. Usaremos generar_series en PostgreSQL para completar los valores que faltan.

Digamos que tiene la siguiente tabla 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 |
+------------+------+

Lectura adicional:Cómo calcular la mediana en PostgreSQL

Como puede ver en la tabla anterior, faltan valores de fecha como 2, 3 de abril, etc.

Si tratamos de trazar estos datos en un gráfico, se verá algo así como

Tal gráfico puede ser engañoso ya que no muestra los espacios entre columnas para las fechas que faltan.

Lectura adicional:Cómo calcular la media móvil en PostgreSQL

Para completar los datos que faltan en PostgreSQL, necesitamos crear una tabla de series de fechas de "ayuda" que contenga todas las fechas entre las fechas mínimas y máximas en nuestra tabla, incluidos los valores de fechas que faltan como filas. Nos uniremos a esta mesa auxiliar con nuestras ventas mesa.

Usaremos generar_series en PostgreSQL para generar una tabla de series de fechas. generar_series La función genera automáticamente una serie continua de números y fechas, si proporciona los valores mínimo y máximo para su serie.

Aquí hay un ejemplo, donde le decimos a generate_series que genere una serie de fechas entre las fechas mínimas y máximas en nuestra tabla, incluidos los valores de fecha faltantes como filas.

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

Lectura adicional:Cómo importar un archivo CSV en PostgreSQL

A continuación, hacemos una combinación IZQUIERDA de la tabla auxiliar con ventas para completar las fechas que faltan en 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

Después de completar las fechas que faltan en PostgreSQL, puede usar una herramienta de informes para trazar estos datos en un gráfico de barras o tablero y compartirlos con su equipo. Este es un ejemplo de un gráfico de barras que muestra las ventas diarias, creado con Ubiq.

¡Vea la diferencia en 2 gráficos!

Si desea crear gráficos, paneles e informes a partir de la base de datos PostgreSQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.