PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wypełnić brakujące daty w PostgreSQL za pomocą generate_series

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja zapytań SELECT DISTINCT ON z Postgresql do MySQL

  2. Użyć adresu e-mail jako klucza podstawowego?

  3. Jak CONCAT_WS() działa w PostgreSQL

  4. Jak wysłać zapytanie do kolumny json dla pustych obiektów?

  5. PostgreSQL:Pokaż tabele w PostgreSQL