【问题标题】:ClickHouse, find ads with first event "click"ClickHouse,查找第一个事件“点击”的广告
【发布时间】:2020-06-20 11:09:10
【问题描述】:

我有一个包含 [datetime, ad_id, event, platform] 列的表格,其中

ad_id - 广告的id

事件 - {'view', 'click'}

平台 - {'web'、'android'、'ios'}

我想查找在查看之前点击过的 ad_id。

我该怎么做?

【问题讨论】:

    标签: sql clickhouse


    【解决方案1】:
    select ad_id, 
           minIf(datetime, event = 'click' and datetime is not Null) clicktime,
           minIf(datetime, event = 'view' and datetime is not Null) viewtime
    from events
    group by ad_id
    having clicktime <> 0 and clicktime  < viewtime
    

    【讨论】:

    • 谢谢。但是“clicktime”和“viewtime”有空值。我怎样才能删除它?出于某种原因,isNotNull(点击时间)不起作用。
    • select t.ad_id, t.clicktime, t.viewtime from (select ad_id, minIf(time, event = 'click') clicktime, minIf(time, event = 'view') viewtime from ads_data group by ad_id) t where t.clicktime is not null and t.clicktime &lt; t.viewtime
    • 完整查询为:select t.ad_id, t.clicktime, t.viewtime from (select ad_id, minIf(time, event = 'click' and time is not Null) clicktime, minIf(time, event = 'view' and time is not Null) viewtime from ads_data group by ad_id) t where isnotnull(t.clicktime) and t.clicktime &lt; t.viewtime分组操作后存在空值(如ad_id没有点击事件),“isnotnull”分组后不删除。
    • 您的客户端 DBGrip 将 0 时间显示为 Null。这是不正确的。 HAVING clicktime &lt;&gt; 0 AND (clicktime &lt; viewtime)
    • @ivan 我固定答案
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多