我有订单表:
| order_id | buyer_id | order_created_at |
|----------|----------|---------------------|
| 54 | 609 | 2018-08-11 16:46:53 |
| 74 | 363 | 2019-06-01 00:00:00 |
| 75 | 300 | 2019-06-01 00:00:02 |
| 76 | 609 | 2019-06-01 00:00:03 |
我想像这样显示数据:
| order_id | buyer_id | Number_of_orders_plus_this_order |
|----------|----------|----------------------------------|
| 54 | 609 | 2 |
| 74 | 363 | 4 |
| 75 | 300 | 7 |
| 76 | 609 | 5 |
我尝试了两种方法,第一种:
select t1.order_id, orders.buyer_id, count(1) as Number_of_orders_plus_this_order
from (
select buyer_id, order_created_at, order_id
from orders o1
where o1.order_id in (75, 74, 54,76)
) as t1
join orders on orders.buyer_id = t1.buyer_id
where orders.order_created_at <= t1.order_created_at
group by 1, 2
由于其中一位买家(id:609)显示了两次,并且我按buyer_id分组,这将显示忽略他的订单之一的结果。 像这样:
| order_id | buyer_id | Number_of_orders_plus_this_order |
|----------|----------|----------------------------------|
| 54 | 609 | 2 |
| 74 | 363 | 4 |
| 75 | 300 | 7 |
第二种方法是使用python,我为每个订单创建一个循环并查询数据库。这当然需要很长时间,而且根本不实用。
最佳答案
您可以使用相关子查询来做到这一点:
SELECT order_id, buyer_id, order_created_at, 1 + (
SELECT COUNT(*)
FROM orders AS x
WHERE x.buyer_id = t.buyer_id
AND (
x.order_created_at < o.order_created_at OR (
-- orders having same date need a tie breaker
x.order_created_at = o.order_created_at
AND x.order_id < o.order_id
)
)
) AS number_of_orders_plus_this_order
FROM orders AS t
WHERE order_id IN (75, 74, 54, 76)
关于mysql - 如何统计当前订单之前的订单数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57708518/