【发布时间】:2019-05-01 07:05:14
【问题描述】:
由于 ClickHouse 不支持用于查询的 WITH 子句,我在实现用于计算 MAU 的查询时遇到了麻烦(每月活跃用户逐日计算,30 天范围也在逐日移动)。 在 Postgres 中我会这样做:
WITH days AS (
SELECT created_at::DATE AS day,
FROM events
WHERE created_at > '2019-04-01'
GROUP BY 1
)
SELECT day,
(SELECT count(distinct user_id)
FROM events
WHERE events.created_at::DATE BETWEEN days.day-29 AND days.day
AND created_at > '2019-04-01'
) AS mau
FROM days
想要的结果如下所示
┌────────day─┬──mau─┐
│ 2019-04-04 │ 1278 │
│ 2019-04-05 │ 1375 │
│ 2019-04-06 │ 1162 │
│ 2019-04-07 │ 1237 │
│ 2019-04-08 │ 1272 │
│ 2019-04-09 │ 1263 │
│ 2019-04-10 │ 1336 │
│ 2019-04-11 │ 1457 │
│ 2019-04-12 │ 1286 │
│ 2019-04-13 │ 1210 │
│ 2019-04-14 │ 1253 │
│ 2019-04-15 │ 2342 │
│ 2019-04-16 │ 1464 │
│ 2019-04-17 │ 1513 │
│ 2019-04-18 │ 1158 │
│ 2019-04-19 │ 1207 │
│ 2019-04-20 │ 1222 │
│ 2019-04-21 │ 1054 │
│ 2019-04-22 │ 1505 │
│ 2019-04-23 │ 5287 │
│ 2019-04-24 │ 4367 │
│ 2019-04-25 │ 3624 │
│ 2019-04-26 │ 2415 │
│ 2019-04-27 │ 1962 │
│ 2019-04-28 │ 2032 │
│ 2019-04-29 │ 2547 │
│ 2019-04-30 │ 4059 │
└────────────┴──────┘
【问题讨论】:
标签: sql clickhouse