sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:vul NULL-waarden in timeserie-query met vorige waarde

Ik vond de volgende methode gemakkelijker:

Maak het gegeven gegevensvoorbeeld:

WITH example (date,close) AS 
(VALUES 
    ('12:00:00',3),
    ('12:00:01',4),
    ('12:00:02',5),
    ('12:00:03',NULL),
    ('12:00:04',NULL), 
    ('12:00:05',3)
) 
SELECT * INTO temporary table market_summary FROM example;

Vraag om NULL-waarden te vullen met de vorige gevulde waarde

select 
    date, 
    close, 
    first_value(close) over (partition by grp_close) as corrected_close
from (
      select date, close,
             sum(case when close is not null then 1 end) over (order by date) as grp_close
      from   market_summary
) t

Terug

date      | close | corrected_close
-----------------------------------
12:00:00  | 3     | 3
12:01:00  | 4     | 4
12:02:00  | 5     | 5
12:03:00  | NULL  | 5
12:04:00  | NULL  | 5
12:05:00  | 3     | 3
  • close:bestaande waarde
  • corrected_close:gecorrigeerde waarde


  1. Hoe kan ik een enkele rij/record kopiëren van de ene MySQL-instantie naar de andere?

  2. Hoe de laatste rij per groep te krijgen in PostgreSQL

  3. Hoe zet ik standaardwaarden voor elke kolom in de tabel?

  4. Postgres maakt een tabel met een reeks externe sleutels