[英]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-14
到2021-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.