gpt4 book ai didi

mysql - SQL - 带条件的 min(date)

转载 作者:行者123 更新时间:2023-11-29 06:39:43 25 4
gpt4 key购买 nike

我们开展了一项促销事件,用户可以免费收到第一个订阅订单。当用户使用促销时,价格 = $0.00。我对示例 A 中的数据感兴趣。

示例 A - 用户 50 开始进行促销并持续了两个月

order_id  user_id    price    created_at
1 50 0.00 2018-01-15
5 50 20.00 2018-02-15
9 50 20.00 2018-03-15

示例 B - 用户 100 已经是活跃订阅者,他取消了帐户并通过促销重新激活,我不想算入他

order_id  user_id    price    created_at
2 100 20.00 2018-01-16
3 100 0.00 2018-01-17
7 100 20.00 2018-02-17

--这是我的查询--

enter image description here

这将返回拥有多个订单的所有用户

其中至少一个订单的价格 = 0.00

-此数据集返回示例 A 和示例 B

--我的问题--

大部分数据都是正确的(示例 A),但我想省略其中的一小部分,因为它们扭曲了我的数据(示例 B)。我想删除示例 B 用户。

我想删除第一个订单不是促销事件的用户。

我如何要求他们的第一个订单的价格 = 0.00?我在想 min(created_at) 的一些事情?

最佳答案

您可以使用以下方式获取第一个订单的时间:

select user_id, min(created_at) as min_ca
from t
group by user_id;

接下来,您可以使用以下方法获取第一个订单的价格:

select oi.*
from order_items oi join
(select user_id, min(created_at) as min_ca
from order_items oi
group by user_id
) ooi
on oi.user_id = ooi.user_id and oi.created_at = ooi.min_ca
where oi.price = 0.00;

然后您可以使用joininexists获取所有记录;

select oi.*
from order_items oi join
order_items oi1
on oi.user_id = oi1.user_id join
(select user_id, min(created_at) as min_ca
from order_items oi
group by user_id
) u1
on oi1.user_id = u1.user_id and oi1.created_at = u1.min_ca
where oi1.price = 0.00;

关于mysql - SQL - 带条件的 min(date),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com