【发布时间】:2020-12-11 10:34:36
【问题描述】:
我正在尝试使用 ClickHouse 计算登录用户次日留存率。
t_user_login的表结构为:
┌─name────┬─type──────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ user │ String │ │ │ │ │ │
│ log_day │ DateTime('Asia/Shanghai') │ │ │ │ │ │
└─────────┴───────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
SQL 是:
SELECT DISTINCT log_day,a.user as user_day0,b.user as user_day1
FROM (
SELECT min(log_day) as log_day, user
FROM t_user_login
GROUP BY user
) a
LEFT JOIN t_user_login b
ON dateDiff('day', b.log_day, a.log_day) = 1 AND a.user = b.user;
但收到异常:
从服务器收到异常(版本 20.11.4): 代码:403。DB::Exception:从 localhost:9000 接收。 DB::Exception: JOIN ON 部分中的列无效。 b.log_day 和 log_day 列来自不同的表。:在处理 dateDiff('day', b.log_day, log_day) = 1 时。
这真的让我困惑了很长时间。任何人都可以帮助我,谢谢。
【问题讨论】:
标签: sql database datediff clickhouse