sql >> Databáze >  >> RDS >> PostgreSQL

Vyplňte tabulku údaji pro chybějící datum (postgresql, redshift)

Podívejte se na myšlenku dotazu:

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)

Budete muset zvolit počáteční a koncové datum podle svých požadavků. Dotaz může být poměrně drahý (zmínil jste se o miliardách mezer), takže jej používejte opatrně (testujte na menší podmnožině dat nebo provádějte po etapách).

Při absenci generate_series() můžete si vytvořit svůj vlastní generátor. Zde je zajímavý příklad . Místo generate_series() lze použít pohledy z citovaného článku . Pokud například potřebujete období '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;

získáte stejný výsledek jako v prvním příkladu.



  1. Dotaz Android SQLite, kde sloupec není prázdný a není prázdný

  2. PDO:zkontrolujte aktualizovaný nebo vložený záznam pomocí mysql INSERT ON DUPLICATE KEY UPDATE

  3. Odstraňte duplicitní sloupec po dotazu SQL

  4. Klasický problém s připojením ASP ke vzdálené databázi SQL Server