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

Wypełnij tabelę danymi dla brakującej daty (postgresql, redshift)

Spójrz na ideę zapytania:

select distinct on (domain, new_date) *
from (
    select new_date::date 
    from generate_series('2016-04-12', '2016-04-17', '1d'::interval) new_date
    ) s 
left join a_table t on date <= new_date
order by domain, new_date, date desc;

  new_date  |     domain      |    date    | visitors | hits  
------------+-----------------+------------+----------+-------
 2016-04-12 | www.domain1.com | 2016-04-12 |     1231 | 23423
 2016-04-13 | www.domain1.com | 2016-04-13 |     1374 | 26482
 2016-04-14 | www.domain1.com | 2016-04-13 |     1374 | 26482
 2016-04-15 | www.domain1.com | 2016-04-13 |     1374 | 26482
 2016-04-16 | www.domain1.com | 2016-04-13 |     1374 | 26482
 2016-04-17 | www.domain1.com | 2016-04-17 |     1262 | 21493
(6 rows)

Musisz wybrać datę rozpoczęcia i zakończenia zgodnie ze swoimi wymaganiami. Zapytanie może być dość kosztowne (wspomniałeś o miliardach luk), więc stosuj je ostrożnie (testuj na mniejszym podzbiorze danych lub wykonaj etapami).

W przypadku braku generate_series() możesz stworzyć własny generator. Oto interesujący przykład . Widoki z cytowanego artykułu mogą być użyte zamiast generate_series() . Na przykład, jeśli potrzebujesz okresu '2016-04-12' + 5 days :

select distinct on (domain, new_date) *
from (
    select '2016-04-12'::date+ n new_date
    from generator_16
    where n < 6
    ) s 
left join a_table t on date <= new_date
order by domain, new_date, date desc;

uzyskasz taki sam wynik jak w pierwszym przykładzie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połączenie Orbeon Forms Postgres DB

  2. Zadanie pgAgent kończy się niepowodzeniem z błędem uwierzytelniania

  3. oblicz sumę wartości powiązanych z nakładającymi się zakresami dat

  4. Utwórz json z wartościami kolumn jako kluczami obiektów

  5. Jak zdobyć tylko jsonb konkretnych kluczy z postgresa?