要使每天都有数据且默认赋值为 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表或使用生成日期范围的内置函数。

ClickHouse SQL 技巧:如何确保每天都有数据并默认赋值为 0

原文地址: https://www.cveoy.top/t/topic/oDmb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录