PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL:попълнете NULL стойности в заявка за времева серия с предишна стойност

Намерих следния метод по-лесен:

Създайте дадена извадка от данни:

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;

Заявка за попълване на NULL стойности с предишната попълнена стойност

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

Връщане

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
  • затваряне:съществуваща стойност
  • corrected_close:коригирана стойност


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Валидиране на уникалност в база данни, когато валидирането има условие за друга таблица

  2. Топ GUI инструменти за PostgreSQL

  3. Персонализирана агрегатна функция в PostgreSQL

  4. Сравнителен анализ, управлявани PostgreSQL облачни решения – Google Cloud:Част трета

  5. Неочаквани резултати от SQL заявка с BETWEEN клеймца за време