【问题标题】:ClickHouse Columns are from different tables while processing dateDiffClickHouse 列在处理 dateDiff 时来自不同的表
【发布时间】: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


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2012-06-28
      相关资源
      最近更新 更多