我有两个用于用户及其订单的MySQL表,具有以下结构(简化了问题):
[USERS表]
用户ID
[ORDERS表格]
id
user_id
日期
我需要请求获得COUNT个在当前期间下了第一笔订单(第一张发票的用户计数)的用户,比方说在当年的当前月份。
我使用这样的请求,对于这个示例,我们以“ Apr 2019”为例:
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查询,以使首次开具发票的用户计入当前期间(例如一个月)。
答案 0 :(得分:2)
如果我对您的理解正确;您首先需要获得每个客户的第一笔订单。不需要检查他们的第一笔订单日期是否在您期望的范围内,并获得符合您条件的客户数量。
所以这是它的样子:
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'
您可以在this fiddle
中进行检查在问题的第二部分发表评论; 您应该像这样过滤内部查询:
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'