我为用户和他们的订单提供了两个MySQL表,其结构(因问题而简化):
用户表
用户标识
订单表
id
user_id
日期
我需要提出要求,以获得的用户谁下了他们的第一次订单(第一次发票用户计数)在当前期间,例如在当前月份的今年。
我使用这样的请求,假设这个例子是针对“2019年4月”的:
SELECT count(distinct orders.user_id) AS value
FROM orders,
users
WHERE users.userid = orders.user_id
&& DATE_FORMAT(orders.date,"%b %Y") = "Apr 2019"
&& (
SELECT DATE_FORMAT(orders.date,"%b %Y") AS firstorderdate
FROM orders
WHERE orders.user_id = users.userid
ORDER BY date ASC LIMIT 1) = "Apr 2019"
)
在查询的最后部分,我要做的是获得第一个用户订单,并检查它的日期是否位于当前期间(2019年4月)。正如我所看到的,这部分请求是不正确的,因为我们正在检查所有用户,我不知道如何检查当前用户的第一次订单的总体请求。
请帮助正确的MySQL查询,以获得第一次发票用户计数在当前期间(前)。月)。
发布于 2019-04-17 06:38:10
如果我对你的理解是正确的,你首先需要为每一位客户获得第一批订单。您需要检查他们的第一个订单日期是否在您希望的范围内,并获得与您的标准相匹配的客户数量。
下面是它的样子:
select count(orders.user_id) from orders
inner join
(
select user_id, min(id) as firstOrderID from orders
group by user_id
) as firstOrders
on orders.id=firstOrders.firstOrderID
where orders.date_ between '2019-04-01' and '2019-04-30'
您可以在这把小提琴中检查它。
对于问题的第二部分,在注释中;您应该在内部查询中进行如下过滤:
select count(orders.user_id) from orders
inner join
(
select user_id, min(id) as firstOrderID from orders
inner join users on users.user_id=orders.user_id
where users.user_type <> "ihs"
group by user_id
) as firstOrders
on orders.id=firstOrders.firstOrderID
where orders.date_ between '2019-04-01' and '2019-04-30'
https://stackoverflow.com/questions/55729307
复制