我试图使用mysql从我的订单表中提取每个用户的最后5个订单,但是有些人怎么做不到。
订单按日期排列。
我需要使用mysql
为每个用户提取最后5个订单表格结构:
订单,BuyerId,日期
订单存储方式如下:
1,1,2013-07-01
2,1,2013-07-02
3,2,2013-07-03
4,2,2013-07-04
5,3,2013-07-06
6,2,2013-07-07
7,2,2013-07-08
8,1,2013-07-09
etc
OrderId是主要索引,唯一
请帮助我,我已经尝试了几个小时,但有些人怎么办不了。
答案 0 :(得分:2)
这应该适合您 - 您需要为每个组建立一个行号:
select *
from (
select BuyerId, Date,
@rn:=if(@prevBuyerId=BuyerId,@rn+1,1) rn,
@prevBuyerId:=BuyerId
from orders
join (select @rn:=0, @prevBuyerId:=0 ) t
order by BuyerId, Date desc
) t
where rn <= 5
以下是一个示例:http://sqlfiddle.com/#!2/bba76/5
在旁注中,我对使用限制和分组的评论感到惊讶...
答案 1 :(得分:1)
您还可以通过执行以下操作在一行中提取最后五个订单:
select buyerid, substring_index(group_concat(order order by date desc), ',', 5) as orders5
from orders o
group by buyerid;
这将以逗号分隔的列表返回它们。如果您想真正获得订单,那么您可以加入他们:
select o.*
from orders o join
(select buyerid, substring_index(group_concat(order order by date desc), ',', 5) as orders5
from orders o
group by buyerid
) b
on o.buyerid = b.buyerid and
find_in_set(o.orderid, b.orders5) > 0;
但是,我希望带有变量的版本能够更好地运行。