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

时间:2019-04-17 13:59:56

标签: mysql

我有两个用于用户及其订单的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查询,以使首次开具发票的用户计入当前期间(例如一个月)。

1 个答案:

答案 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'