Mysql 选择每个项目的最后3行

Mysql 选择每个项目的最后3行,mysql,Mysql,我有两张桌子:原材料和原材料 原材料有字段 id, name 原材料移动有以下字段 id, raw_material_id, price, created 所以,我需要选择每个原材料的最后3步 select * from (select a.id,a.price,a.created, if(@mat=a.raw_material_id,@num:=@num+1,@num:=1) rank, @mat:=a.raw_material_id

我有两张桌子:原材料和原材料

原材料有字段

id, name
原材料移动有以下字段

id, raw_material_id, price, created
所以,我需要选择每个原材料的最后3步

select * from 
  (select a.id,a.price,a.created, 
          if(@mat=a.raw_material_id,@num:=@num+1,@num:=1) rank,
          @mat:=a.raw_material_id
     from raw_materials_moves a, (select @num:=0) b   
     order by a.raw_material_id,a.created desc) temp
where rank <=3;
我有这个问题,但不起作用

SELECT a.*, b.price, b.created
FROM raw_materials a
LEFT JOIN
 (SELECT price, raw_material_id, created FROM raw_material_moves ORDER BY created DESC LIMIT 3) b
    ON b.raw_material_id=a.id
ORDER BY a.id

对其进行反向排序,即。。。按somefield DESC排序,然后通过附加限制3获得前3个,我建议您使用DESC或按相反顺序获取每个原材料的创建日期的最后3个移动

  SELECT r1.id,name,raw_material_id 

FROM raw_materials r1, raw_materials_move r2

 WHERE r1.id=r2.id ORDER BY DESC LIMIT 3;
select * from 
  (select a.id,a.price,a.created, 
          if(@mat=a.raw_material_id,@num:=@num+1,@num:=1) rank,
          @mat:=a.raw_material_id
     from raw_materials_moves a, (select @num:=0) b   
     order by a.raw_material_id,a.created desc) temp
where rank <=3;

参见

在使用变量来完成这项工作方面,我基本上同意@chetan的观点


我在这个问题上遇到的,以及处理这个问题的不同方法。。从简单到困难。

我对Mysql很陌生,你能给我举个例子吗?你有电子邮件吗?因此,我可以向您发送表的SQL,我运行了查询,但它返回了整个移动表。我认为此查询在DATETIME字段方面存在问题,有时有效,而另一些则无效:s