微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与clickouse中的滞后分区功能相同

如何解决与clickouse中的滞后分区功能相同

我需要知道每个用户的订购频率。我的意思是每个用户的2个订购时间之间存在差异。 在sql中,我使用了“滞后分区依据”,但是我不知道如何在Click House中计算该延迟。 我需要以下数据:

enter image description here

首先,我应该使用user_id和created_at对数据进行排序,然后我需要为行中的每个用户ID提供下一个订购时间。我不能使用邻居功能,因为它无法按user_id进行分区。

解决方法

我不明白为什么无法在您的情况下使用neighbor,但它应该能很好地工作:

SELECT 
    user_id,created,if(neighbor(user_id,1,NULL) != user_id,NULL,neighbor(created,NULL)) AS next_created
FROM 
(
    SELECT 
        number % 3 AS user_id,now() + (number * 360) AS created
    FROM numbers(11)
    ORDER BY 
        user_id ASC,created ASC
)

/*
┌─user_id─┬─────────────created─┬────────next_created─┐
│       0 │ 2020-10-21 16:00:21 │ 2020-10-21 16:18:21 │
│       0 │ 2020-10-21 16:18:21 │ 2020-10-21 16:36:21 │
│       0 │ 2020-10-21 16:36:21 │ 2020-10-21 16:54:21 │
│       0 │ 2020-10-21 16:54:21 │                ᴺᵁᴸᴸ │
│       1 │ 2020-10-21 16:06:21 │ 2020-10-21 16:24:21 │
│       1 │ 2020-10-21 16:24:21 │ 2020-10-21 16:42:21 │
│       1 │ 2020-10-21 16:42:21 │ 2020-10-21 17:00:21 │
│       1 │ 2020-10-21 17:00:21 │                ᴺᵁᴸᴸ │
│       2 │ 2020-10-21 16:12:21 │ 2020-10-21 16:30:21 │
│       2 │ 2020-10-21 16:30:21 │ 2020-10-21 16:48:21 │
│       2 │ 2020-10-21 16:48:21 │                ᴺᵁᴸᴸ │
└─────────┴─────────────────────┴─────────────────────┘
*/
,

groupArray允许对其进行转换

select 1 uid,555 time union all select 1,666 union all select 1,777
┌─uid─┬─time─┐
│   1 │  555 │
│   1 │  666 │
│   1 │  777 │
└─────┴──────┘

对此

select uid,groupArray(time) dtime from 
   (select * from (select 1 uid,777) order by uid,time) 
  group by uid

┌─uid─┬─dtime─────────┐
│   1 │ [555,666,777] │
└─────┴───────────────┘

select uid,arrayJoin(arrayPushBack(arrayPopFront(groupArray(time)),null)) dtime from 
   (select * from (select 1 uid,time) 
  group by uid
┌─uid─┬─dtime─┐
│   1 │   666 │
│   1 │   777 │
│   1 │  ᴺᵁᴸᴸ │
└─────┴───────┘


select uid,time,atime from (
  select uid,groupArray(time) as stime,arrayPushBack(arrayPopFront(stime),null) dtime from 
   (select * from (select 1 uid,time) 
  group by uid )
   array join stime as time,dtime as atime
┌─uid─┬─time─┬─atime─┐
│   1 │  555 │   666 │
│   1 │  666 │   777 │
│   1 │  777 │  ᴺᵁᴸᴸ │
└─────┴──────┴───────┘

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?