如何获取客户的用户 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 以及他们使用聚合或窗口函数下的每个订单?的主要内容,如果未能解决你的问题,请参考以下文章