mysql - 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 阶,以不添加大量示例数据记录)。
不需要一个请求 - 如果不能在一个请求中完成,则很少有可能并被允许。
解决方案
您可以使用相关子查询来获取用户在当前订单之前下达的订单数。如果那是 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';
推荐阅读
- c++ - DirectX 11 - 轴旋转
- c# - 如何停止调度程序计时器?
- google-chrome - 旧 Chrome 插件清单:无法识别的清单键“插件”
- java - 导入库后出现 NoClassDefFoundError
- c# - Botframework V4:发送主动消息时更改对话框
- c# - 如何将不同类型的 ObservableCollections 添加到 ObservableCollection
- aframe - 嵌入一个
打破鼠标/光标的光线投射 - c# - 使用带有 Mahapps MetroTabItem 的 Caliburn.Micro 不会将视图加载到 ContentControl
- javascript - 如何在 datatable.net 数据表中设置输入边框颜色并禁用数字微调器
- windows - 包含 M-dash 的文件名中断批处理文件