MySQL 查询 - 获取在当前时间段内下了 FIRST 订单的用户数



我有两个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'

最新更新