如何获取客户的用户 ID 以及他们使用聚合或窗口函数下的每个订单?

Posted

技术标签:

【中文标题】如何获取客户的用户 ID 以及他们使用聚合或窗口函数下的每个订单?【英文标题】:How can I get the user ID of a client and every order they made using AGGREGATION OR WINDOW FUNCTION? 【发布时间】:2021-09-02 17:03:30 【问题描述】:

所以,我有下表,其中包含我的客户的用户 ID、他们的订单时间戳和订单交付的时间戳。

USERID ORDER_TIME DELIVERY_TIME
0033 2021-01-01 12:30:14 2021-01-01 13:30:00
0011 2021-02-12 16:15:51 2021-02-12 17:16:51
0040 2021-02-18 19:22:55 2021-02-18 20:00:05
0017 2021-03-11 22:11:56 2021-03-11 22:57:16
0011 2021-01-09 11:14:18 2021-01-09 11:44:01
0040 2021-05-06 09:12:13 2021-05-06 10:00:10
0033 2021-04-16 23:00:45 2021-04-16 23:45:40
0011 2021-03-30 17:23:45 2021-03-30 17:51:51

但是,我需要查询每个订购两次或多次的客户的用户 ID 以及每个订单和交货。经过一番阅读,我发现窗口函数或聚合函数可以帮助我,但我不知道如何。我需要这样的结果,并且订单时间按升序排列:

USERID ORDER_TIME DELIVERY_TIME
0011 2021-01-09 11:14:18 2021-01-09 11:44:01
2021-02-12 16:15:51 2021-02-12 17:16:51
2021-03-30 17:23:45 2021-03-30 17:51:51
0033 2021-01-01 12:30:14 2021-01-01 13:30:00
2021-04-16 23:00:45 2021-04-16 23:45:40
0040 2021-02-18 19:22:55 2021-02-18 20:00:05
2021-05-06 09:12:13 2021-05-06 10:00:10

你们能帮我解决这个问题吗? 非常非常感谢!

【问题讨论】:

【参考方案1】:

使用下面的方法

select USERID, 
  array_agg(struct(ORDER_TIME, DELIVERY_TIME) order by ORDER_TIME) STATS
from `project.dataset.table`
group by USERID 
having count(1) > 1
order by USERID    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

米哈伊尔,你介意帮我多一点吗?假设我现在有一个 STATS.platform 列。在本专栏中,我有手机、台式机和平板电脑。有没有一种简单的方法可以只选择那些 STATS.platform 包含桌面和移动设备的寄存器?很抱歉打扰您。 当然。没问题。请发布包含所有这些详细信息的新问题,我很乐意提供帮助:o) 这里是链接:***.com/questions/68028045/…非常感谢您的帮助!

以上是关于如何获取客户的用户 ID 以及他们使用聚合或窗口函数下的每个订单?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MongoDB 聚合对唯一 ID 求和?

将数据从弹出窗口传递到页面

如何识别特定偶数之前的出现次数

OAuth 2.0客户端凭据获取用户ID

如何使用 discord Bot 类获取给定 discord id 的用户信息?

Discord.js如何使用用户ID获取用户昵称