Często musimy uzupełnić brakujące daty w PostgreSQL, wypełniając brakujące wiersze dla tych wartości dat. Oto jak uzupełnić brakujące daty w PostgreSQL za pomocą funkcji generate_series.
Jak wypełnić brakujące daty w PostgreSQL za pomocą generate_series
Oto kroki do uzupełnienia brakujących dat w PostgreSQL. Użyjemy generate_series w PostgreSQL do uzupełnienia brakujących wartości.
Załóżmy, że masz następującą tabelę sprzedaż(data_zamówienia,sprzedaż)
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 |
+------------+------+
Przeczytaj bonus:Jak obliczyć medianę w PostgreSQL
Jak widać w powyższej tabeli, brakuje w niej wartości dat, takich jak 2, 3 kwietnia itp.
Jeśli spróbujemy wykreślić te dane na wykresie, będzie to wyglądać mniej więcej

Taki wykres może wprowadzać w błąd, ponieważ nie pokazuje przerw w kolumnach dla brakujących dat.
Przeczytaj bonus:Jak obliczyć średnią kroczącą w PostgreSQL
Aby uzupełnić brakujące dane w PostgreSQL, musimy utworzyć „pomocniczą” tabelę serii dat, która zawiera wszystkie daty między datami minimalnymi i maksymalnymi w naszej tabeli, w tym brakujące wartości dat jako wiersze. Dołączymy do tego stołu pomocniczego z naszą sprzedażą tabela.
Użyjemy generate_series w PostgreSQL do generowania tabeli serii dat. generate_series funkcja automatycznie generuje ciągłą serię liczb i dat, jeśli podasz minimalne i maksymalne wartości dla swojej serii.
Oto przykład, w którym mówimy generate_series, aby wygenerować serię dat między minimalną i maksymalną datą w naszej tabeli, w tym brakujące wartości dat jako wiersze.
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
Przeczytaj bonus:Jak zaimportować plik CSV do PostgreSQL
Następnie łączymy PO LEWEJ tabeli pomocniczej z sprzedażą do uzupełnienia brakujących dat w 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
Po uzupełnieniu brakujących dat w PostgreSQL możesz użyć narzędzia do raportowania, aby wykreślić te dane na wykresie słupkowym lub pulpicie nawigacyjnym i udostępnić je swojemu zespołowi. Oto przykład wykresu słupkowego przedstawiającego dzienną sprzedaż, utworzonego za pomocą Ubiq.

Zobacz różnicę na 2 wykresach!
Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych PostgreSQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.