如何将缺失日期添加为 table 中的行
How to add in missing dates as rows in table
我有以下代码,它让我知道每天有多少行被完成。
SELECT
ingestion_time,
COUNT(ingestion_time) AS Rows_Written,
FROM
`workday.ingestions`
GROUP BY
ingestion_time
ORDER BY
ingestion_time
这会给我如下所示的内容:
Ingestion_Time
Rows_Written
Jan 2, 2021
8
Jan 5, 2021
5
Jan 8, 2021
9
Jan 9, 2021
2
但是,我希望能够添加缺失的日期,这样 tables 看起来像这样:
Ingestion_Time
Rows_Written
Jan 2, 2021
8
Jan 3, 2021
0
Jan 4, 2021
0
Jan 5, 2021
5
Jan 6, 2021
0
Jan 7, 2021
0
Jan 8, 2021
9
Jan 9, 2021
2
我该怎么做呢?是否需要创建一个包含所有日期的完整 table 并以某种方式加入它,或者有其他方法吗?提前致谢。
考虑以下方法
select date(Ingestion_Time) Ingestion_Time, Rows_Written
from your_current_query union all
select day, 0 from (
select *, lead(Ingestion_Time) over(order by Ingestion_Time) next_time
from your_current_query
), unnest(generate_date_array(date(Ingestion_Time) + 1, date(next_time) - 1)) day
如果应用于您问题中的示例数据 - 输出为
我有以下代码,它让我知道每天有多少行被完成。
SELECT
ingestion_time,
COUNT(ingestion_time) AS Rows_Written,
FROM
`workday.ingestions`
GROUP BY
ingestion_time
ORDER BY
ingestion_time
这会给我如下所示的内容:
Ingestion_Time | Rows_Written |
---|---|
Jan 2, 2021 | 8 |
Jan 5, 2021 | 5 |
Jan 8, 2021 | 9 |
Jan 9, 2021 | 2 |
但是,我希望能够添加缺失的日期,这样 tables 看起来像这样:
Ingestion_Time | Rows_Written |
---|---|
Jan 2, 2021 | 8 |
Jan 3, 2021 | 0 |
Jan 4, 2021 | 0 |
Jan 5, 2021 | 5 |
Jan 6, 2021 | 0 |
Jan 7, 2021 | 0 |
Jan 8, 2021 | 9 |
Jan 9, 2021 | 2 |
我该怎么做呢?是否需要创建一个包含所有日期的完整 table 并以某种方式加入它,或者有其他方法吗?提前致谢。
考虑以下方法
select date(Ingestion_Time) Ingestion_Time, Rows_Written
from your_current_query union all
select day, 0 from (
select *, lead(Ingestion_Time) over(order by Ingestion_Time) next_time
from your_current_query
), unnest(generate_date_array(date(Ingestion_Time) + 1, date(next_time) - 1)) day
如果应用于您问题中的示例数据 - 输出为