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.