是否有根据mysql中的where条件从集合中删除重复项的查询?

是否有根据mysql中的where条件从集合中删除重复项的查询?,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,我正在用rails编写一个查询。我有一张名为School和Skill的桌子。 技能有专栏 id: integer name: text school_id: integer 我有@skills,其中包含一些行。但是@skills可以有重复的名称 我想删除@skills where school_id==1中的重复行 例如,如果@skills返回 #<ActiveRecord::Relation [#<Skill id: 249, name: "3 D Priniting", s

我正在用rails编写一个查询。我有一张名为School和Skill的桌子。 技能有专栏

id: integer
name: text 
school_id: integer
我有@skills,其中包含一些行。但是@skills可以有重复的名称

我想删除@skills where school_id==1中的重复行

例如,如果@skills返回


#<ActiveRecord::Relation [#<Skill id: 249, name: "3 D Priniting", school_id: 1>, 
  #<Skill id: 258, name: "Cinematography", school_id: 11>,
  #<Skill id: 174, name: "Sports", school_id: 1>, 
  #<Skill id: 259, name: "Cinematography", school_id: 1>, 
  #<Skill id: 300, name: "Sales", school_id: 11>, 
  #<Skill id: 301, name: "Marketing", school_id: 11>,]

我可以这样删除重复的项目吗?我想在一个查询中实现这一点


注意:非常感谢ActiveRecord中的解决方案。

您可以尝试以下查询:

set @lagName := '';
set @rn := 0;
select id, name, school_id from (
  select 
    case when @lagName = name then @rn:=@rn+1 else @rn:=1 end rn,
    @lagName:=name,
    id,
    name,
    school_id
  from Skills
  order by name, school_id desc
) a where rn=1

它根据
name
column在组内使用行编号。然后按
school\u id
顺序对每组进行排序,因此
school\u id
排在最后。然后就可以选择那些
rn
等于1的记录了。

使用子查询方法。第一组@skills表使用Schol_id和name。然后执行实际的select语句

select * from skills where id in (select id from skills group by school_id, name); 

最大(Id)将包括技能行Id 259。使用min(id)将其从子查询中排除result@AnanthCool哦,对不起,这是错的,谢谢你纠正我:)
select * from skills where id in (select id from skills group by school_id, name); 
select * from skills where id in (select MIN(id) from skills group by  name);