如何解决第一个唯一的Sql行
我有一个用户订单的MySql表,它具有诸如以下的列:
user_id | timestamp | is_order_Parent | Status | 1 | 10-02-2020 | N | C | 2 | 11-02-2010 | Y | D | 3 | 11-02-2020 | N | C | 1 | 12-02-2010 | N | C | 1 | 15-02-2020 | N | C | 2 | 15-02-2010 | N | C |
我想计算每天的新客户数量,该客户定义为:订购非父母订单且其订单状态为C的客户,并且在一天中一次计算用户时,我们不计算其他天的Him
理想的结果表将是:
Timestamp: Day | Distinct values of User ID 10-02-2020 | 1 11-02-2010 | 1 12-02-2010 | 0 <--- already counted user_id = 1 above,so no need to count it here 15-02-2010 | 1
表名是cscart_orders
解决方法
如果运行的是MySQL 8.0,则可以通过窗口函数进行聚合:
select timestamp,sum(timestamp = timestamp0) new_users
from (
select
t.*,min(case when is_order_parent = 'N' and status = 'C' then timestamp end) over(partition by user_id) timestamp0
from mytable t
) t
group by timestamp
窗口min()
计算每个用户成为“新用户”时的时间戳。然后,外部查询按日期进行汇总,并计算在该日期发现了多少新用户。
这种方法的优点是它不需要分别枚举日期。
,您可以使用两种聚合级别:
select first_timestamp,count(*)
from (select t.user_id,min(timestamp) as first_timestamp
from t
where is_order_parent = 'N' and status = 'C'
group by t.user_id
) t
group by first_timestamp;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。