我有一张这样的桌子:
日期 | 团队名字 | 价值 |
---|---|---|
2022-01-01 | 一个 | 1.0 |
2022-01-15 | 一个 | 0.5 |
2022-01-31 | 一个 | 0.2 |
但这仅包含 3 天。我需要一个包含完整日历日期的表格,一年中的每一天都有一行,其中值是最后一个可用的。
例如,从 2022 年 1 月 1 日到 1 月 14 日的所有记录都具有值 1.0(范围为group_name
“A”)。
我试过使用LAST_VALUE()
,但它不工作。
WITH dates AS (
SELECT
date::date
FROM generate_series ( '2022-01-01'::timestamp, '2022-01-31'::timestamp, '1 day'::interval) date
), incomplete_table AS (
SELECT * FROM (VALUES
('2022-01-01'::date, 'a', 1),
('2022-01-15'::date, 'a', 0.5),
('2022-01-31'::date, 'a', 0.2),
('2022-01-02'::date, 'b', 0.1),
('2022-01-10'::date, 'b', 0.15),
('2022-01-20'::date, 'b', 0.15)
) AS t (date,group_name, value)
)
SELECT
dates.date,
group_name,
value,
LAST_VALUE(value) OVER (ORDER BY dates.date DESC) as last_value_window
FROM dates
LEFT JOIN incomplete_table ON incomplete_table.date = dates.date
ORDER BY dates.date DESC;