处理 dateDiff 时,ClickHouse 列来自不同的表
ClickHouse Columns are from different tables while processing dateDiff
我正在尝试使用 ClickHouse 计算登录用户的第二天保留。
t_user_login
的table结构是:
┌─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;
但是收到异常:
Received exception from server (version 20.11.4):
Code: 403. DB::Exception: Received from localhost:9000. DB::Exception: Invalid columns in JOIN ON section. Columns b.log_day and log_day are from different tables.: While processing dateDiff('day', b.log_day, log_day) = 1.
这个真的让我困惑了很久。任何人都可以帮助我,谢谢。
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 toStartOfDay(b.log_day - interval 1 day) =toStartOfDay(a.log_day) AND a.user = b.user;
我正在尝试使用 ClickHouse 计算登录用户的第二天保留。
t_user_login
的table结构是:
┌─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;
但是收到异常:
Received exception from server (version 20.11.4): Code: 403. DB::Exception: Received from localhost:9000. DB::Exception: Invalid columns in JOIN ON section. Columns b.log_day and log_day are from different tables.: While processing dateDiff('day', b.log_day, log_day) = 1.
这个真的让我困惑了很久。任何人都可以帮助我,谢谢。
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 toStartOfDay(b.log_day - interval 1 day) =toStartOfDay(a.log_day) AND a.user = b.user;