我有两个MySQL表供用户及其订单使用,具有以下结构(简化为问题(:
[ 用户表 ]
用户标识
[ 订单表 ]
编号
user_id
日期
我需要请求获取在当前期间下第一个订单(首次开具发票的用户计数(的用户计数,例如在当前年份的当月。
我使用这样的请求,假设对于此示例中的"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查询,以获取当前期间(例如月份(的首次发票用户计数。
理解正确的话;你首先需要为每个客户获得第一个订单。然后您需要检查他们的第一个订单日期是否在您想要的范围内,并获得符合您条件的客户计数。
所以这是它的样子:
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'