ClickHouse SQL 技巧:如何确保每天都有数据并默认赋值为 0
要使每天都有数据且默认赋值为 0,可以使用一个连续的日期序列作为基础表,并将其左连接到现有查询结果中。这样可以确保每个日期都有一个对应的总增量值(如果没有现有数据,则为 0)。
以下是修改后的查询语句:
WITH dates AS (
SELECT toDate('2021-11-27') AS date UNION ALL
SELECT date + 1 FROM dates WHERE date < toDate('2022-05-07')
)
SELECT d.date AS ts,
if(i >= 31, arraySum(arraySlice(total_increase, i-30, 31)), arraySum(arraySlice(total_increase, 1, i))) AS total_increase_num
FROM (
SELECT groupArray(Ds) AS t,
groupArray(app_count) AS total_increase
FROM (
SELECT min_Ds AS Ds,
count(distinct AppIdentifier) AS app_count
FROM (
SELECT AppIdentifier,
min(Ds) AS min_Ds
FROM log_iMonkey_iOS_overview
GROUP BY AppIdentifier
)
GROUP BY min_Ds
ORDER BY min_Ds
)
) ARRAY
JOIN t AS ts,
arrayEnumerate(t) AS i
RIGHT JOIN dates AS d ON d.date = ts
ORDER BY ts
该查询使用一个名为“dates”的公用表表达式(CTE),其中包含一个连续的日期序列。接下来,将现有查询结果与此表进行左连接,以确保每个日期都有一个对应的总增量值。
请注意,此查询中的日期序列是手动创建的。如果需要更长时间范围的数据,可以使用更复杂的技术来动态生成日期序列,例如使用一个Numbers表或使用生成日期范围的内置函数。
原文地址: https://www.cveoy.top/t/topic/oDmb 著作权归作者所有。请勿转载和采集!