获取带有每个日历日期数据的最后日期



我有一些数据:每天的销售额,但有时我有丢失的数据,所以没有记录(例如在周末,但不仅如此)。对于这些日期,我想用最后一个已知值替换空值。我创建了一个引用表,其中包含所有日历日期和一个布尔值,告诉我是否有当天的数据。

例如:

tbody> <<tr>
Date is_data_present
27/10/20221
28/10/20221
29/10/20220
10/10/20220

基本上,您不需要窗口函数。

合并是针对第一行为0的情况,因此在它之前没有值

SELECT
"Date", "is_data_present",
COALESCE((SELECT "Date" FROM table1 WHERE "Date" <= Tab1."Date" AND "is_data_present" = 1 ORDER BY "Date" DESC LIMIT 1 ),"Date") date_to_use
FROM table1 tab1

我尝试过LEAD的东西,但我不知道如何添加一个条件,如'where is_data_present = 1'

除了@nbk的方法,如果你想使用一个窗口函数,你可以考虑FIRST_VALUELAST_VALUE,因为LEADLAG不支持IGNORE NULLS

WITH sample_table AS (
SELECT '27/10/2022' date, 1 is_data_present UNION ALL
SELECT '28/10/2022' date, 1 is_data_present UNION ALL
SELECT '29/10/2022' date, 0 is_data_present UNION ALL
SELECT '30/10/2022' date, 0 is_data_present
)
SELECT *,
LAST_VALUE(IF(is_data_present = 1, date, NULL) IGNORE NULLS) OVER (ORDER BY date) date_to_use,
FROM sample_table;
+------------+-----------------+-------------+
|    date    | is_data_present | date_to_use |
+------------+-----------------+-------------+
| 27/10/2022 |               1 | 27/10/2022  |
| 28/10/2022 |               1 | 28/10/2022  |
| 29/10/2022 |               0 | 28/10/2022  |
| 30/10/2022 |               0 | 28/10/2022  |
+------------+-----------------+-------------+

最新更新