首页 > 解决方案 > MySQL - 获取期间下达第 25 个订单的用户

问题描述

我有具有这种结构的用户和订单表(为问题而简化):

USERS

userid
registered(date)

ORDERS

id
date (order placed date)
user_id

我需要获取在指定期间(例如 2019 年 5 月)下第25 个订单的用户数组(用户 ID数组) 、每个用户第 25 个订单的日期、下第 25 个订单的天数(用户注册日期之间的差异和第 25 次下订单的日期)。

例如,如果用户在 2018 年 4 月注册,然后在 2018 年下了 20 个订单,然后在 2019 年 1 月至 5 月下达了第 21-30 个订单 - 如果他在 5 月下达了第 25 个(他的账户整体)订单,则该用户应该在此数组中2019 年。

我如何使用 MySQL 请求来做到这一点?

示例数据和结构:http ://www.sqlfiddle.com/#!9/998358 (为了测试,您可以获得 3 阶,而不是 25 阶,以不添加大量示例数据记录)。

不需要一个请求 - 如果不能在一个请求中完成,则很少有可能并被允许。

标签: mysqlsql

解决方案


您可以使用相关子查询来获取用户在当前订单之前下达的订单数。如果那是 24,则当前订单是 25 日。然后检查日期是否在所需范围内。

SELECT o1.user_id,
       o1.date,
       datediff(o1.date, u1.registered)
       FROM orders o1
            INNER JOIN users u1
                       ON u1.userid = o1.user_id
       WHERE (SELECT count(*)
                     FROM orders o2
                     WHERE o2.user_id = o1.user_id
                           AND o2.date < o1.date
                               OR o2.date = o1.date
                                  AND o2.id < o1.id) = 24
             AND o1.date >= '2019-01-01'
             AND o1.date < '2019-06-01';

推荐阅读