簡體   English   中英

用前幾天的數據填充空行

[英]Fill empty rows with data from previous days

我有一張桌子看起來像:

日期 封鎖日期 安裝
2022-01-25 2022-01-10 355
2022-01-26 2022-01-11 20
2022-01-26 2022-01-12 70
2022-01-27 2022-01-13 150
2022-01-27 2022-01-14 120

我想復制previous幾天的數據並填寫current

日期 封鎖日期 安裝
2022-01-26 2022-01-11 20
2022-01-26 2022-01-12 70
2022-01-25 2022-01-10 355

結果我想看這張表:

日期 封鎖日期 安裝
... ... ...
2022-01-25 2022-01-10 355
2022-01-26 2022-01-10 355
2022-01-26 2022-01-11 20
2022-01-26 2022-01-12 70
2022-01-27 2022-01-10 355
2022-01-27 2022-01-11 20
2022-01-27 2022-01-12 70
2022-01-27 2022-01-13 150
2022-01-27 2022-01-14 120

我需要一些特定的date並查看block_date並填寫一個月前的日期。 例如:對於2022-01-27 ,它將是從2022-01-142021-12-15的 block_dates(月份間隔,不需要更多)。 我需要檢查以前的date (2022-01-26、2022-01-25、2022-01-24 等)以填充它是否為空。 我不知道如何處理這個問題,我希望我描述的不是那么糟糕。

是否可以? 我可以這樣描述:

SELECT installs FROM table
WHERE date = '2022-01-27' and block_date = '2022-01-13'
IF block_date EXIST THEN USE THIS
IF block_date = '2022-01-13' NOT EXIST THEN 
SELECT installs WHERE date '2021-01-26' and block_date = '2022-01-13'
AND PUT installs FROM date '2021-01-26' and block_date = '2022-01-13' TO NEW ROW as date '2021-01-27' and block_date = '2022-01-13'

我需要從每個block_date檢查前 30 天(與 block_date 的月差)並填寫它。

您的解釋仍然不完全清楚。

我希望您的查詢接近於:

WITH Selection AS (
    SELECT * FROM (VALUES
('2022-01-25'::date,'2022-01-10'::date,355),
('2022-01-26'::date,'2022-01-11'::date,20),
('2022-01-26'::date,'2022-01-12'::date,70),
('2022-01-27'::date,'2022-01-13'::date,150),
('2022-01-27'::date,'2022-01-14'::date,120)
) MyTable(date,block_date,installs)
WHERE block_date = '2022-01-13'
AND '2022-01-27' BETWEEN date - '1 month'::interval AND date
)
SELECT generate_series(COALESCE(previous_date, date-1)::timestamp, (date-1)::timestamp, '1 day')::date, block_date, installs
FROM (
    SELECT *, LEAD(date) OVER (ORDER BY date) AS previous_date
    FROM Selection
) T

1 個月的限制已放在Selection CTE 中。
LEAD window function 負責獲取date的先前值,而 generate_series 將返回一組最多 1 個月的數據。

嘗試一下,看看它是否適合你,如果不適合,請評論它不適合的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM