PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да попълните липсващите дати в PostgreSQL с помощта на generate_series

Често трябва да попълним липсващи дати в PostgreSQL, като попълним липсващи редове за тези стойности на датите. Ето как да попълните липсващи дати в PostgreSQL, като използвате функцията generate_series.

Как да попълните липсващи дати в PostgreSQL с помощта на generate_series

Ето стъпките за попълване на липсващи дати в PostgreSQL. Ще използваме generate_series в PostgreSQL, за да попълним липсващите стойности.

Да кажем, че имате следната таблица 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 |
+------------+------+

Бонус за четене:Как да изчислим медиана в PostgreSQL

Както можете да видите в таблицата по-горе, в нея липсват стойности за дата, като 2, 3 април и т.н.

Ако се опитаме да начертаем тези данни на графика, тя ще изглежда нещо като

Такава графика може да бъде подвеждаща, тъй като не показва пропуски в колоните за липсващи дати.

Бонус за четене:Как да изчислим пълзящата средна в PostgreSQL

За да попълним липсващи данни в PostgreSQL, трябва да създадем „помощна“ таблица с серии от дати, която съдържа всички дати между минималните и максималните дати в нашата таблица, включително липсващи стойности на дати като редове. Ще се присъединим към тази помощна таблица с нашите продажби таблица.

Ще използваме generate_series в PostgreSQL за генериране на таблица с серии от дати. генериране на серия функцията автоматично генерира непрекъсната серия от числа и дати, ако предоставите минималните и максималните стойности за вашата серия.

Ето един пример, където казваме на generate_series да генерира серия от дати между минимална и максимална дата в нашата таблица, включително липсващи стойности на дати като редове.

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

Бонус четене:Как да импортирам CSV файл в PostgreSQL

След това правим ЛЯВО свързване на помощна таблица с продажби за попълване на липсващи дати в 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

След като попълните липсващите дати в PostgreSQL, можете да използвате инструмент за отчитане, за да начертаете тези данни на лента или табло и да ги споделите с вашия екип. Ето пример за лентова диаграма, която показва ежедневните продажби, създадена с Ubiq.

Вижте разликата в 2 диаграми!

Ако искате да създавате диаграми, табла за управление и отчети от базата данни PostgreSQL, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи make_timestamp() в PostgreSQL

  2. Не може да се свърже със сървъра на PostgreSQL:не може да се свърже със сървъра:Разрешението е отказано

  3. PostgreSQL срещу версии на ядрото на Linux

  4. Как да използвам PostgreSQL JSON(B) оператори, съдържащи въпросителен знак? чрез JDBC

  5. Обединяване на конкатениращи JSON(B) колони в заявка