Как я могу исправить временные ряды с TimescaleDB? - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть такие данные:

Month_event | No_people | Cost
2017-03-01  | 78        | 120000 
2017-01-01  | 67        | 220000 
2017-07-01  | 121       | 320000 
2017-04-01  | 70        | 100000 

, и я обычно делаю из своего кода использование SQL-запроса (с окном) в Postgresql для добавления отсутствующих значений во временные ряды (скопируйте значение измесяцем ранее):

Month_event | No_people | Cost
2017-01-01  | 67        | 220000 
2017-02-01  | 67        | 220000 
2017-03-01  | 78        | 120000 
2017-04-01  | 70        | 100000 
2017-05-01  | 70        | 100000  
2017-06-01  | 70        | 100000 
2017-07-01  | 121       | 320000 

Это мой обычный запрос:

WITH 
calendar AS (
    SELECT interval_date::date FROM generate_series('2005-01-01'::date, (select release_month from mtd), '1 month'::interval) interval_date
),
m AS (
    SELECT *, LEAD(monthly_event) OVER (ORDER BY monthly_event) AS next_date
    FROM my_data
)
SELECT *
FROM calendar c
JOIN m
    ON c.interval_date BETWEEN m.monthly_date AND
    (CASE WHEN m.next_date IS NULL THEN date_trunc('month', current_date) ELSE m.next_date - '1 month'::interval END);

Как расширение Postgres, я могу использовать этот же запрос на TimescaleDB, я полагаю.Мне интересно, есть ли лучшее решение для TimescaleDB, так как я не могу понять это из документации.

1 Ответ

0 голосов
/ 30 января 2019

Для этого в TimescaleDB 1.2 есть несколько новых функций, см .: https://blog.timescale.com/sql-functions-for-time-series-analysis/ Заполнение пробелов должно выполнять то, что вы ищете, гораздо проще.

...