Често трябва да попълним липсващи дати в 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-дневен безплатен пробен период.