求一SQL语句,同一字段相同值的记录最多显示3条记录(MYSQL)

时间:2022-08-16 15:12:20
相同company_id最多显示3条记录   
  表结构如下:   
  id   name   company_id   
  1       a           1   
  2       b           1   
  3       c           1   
  4       d           1   
  5       e           2   
  6       f           2                                                 
  7       g           2   
  8       h           2   
  9       i           2   
  10      j           3   
  想要的结果   
  id   name   company_id   
  1       a           1   
  2       b           1   
  3       c           1   
  5       e           2   
  6       f           2                                                 
  7       g           2   
  10      j           3   

11 个解决方案

#1



select a.* from tablename a left join tablename b
on a.company_id=b.company_id and a.id>=b.id
group by a.id,a.name,a.company_id
having count(b.id)<=3
order by a.company_id,a.id;

#2


可以参考下贴。

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集...

#3


在百万级表里有好的解决方法吗?

#4


在百万级表里有好的解决方法吗?

假设记录 五百万 条,你不同的 company_id    有多少?

#5


最多一两万

#6


记录 五百万 条 中 不同的 company_id   两万
5M / 20K
然后 "相同company_id最多显示3条记录  " 也就是要输出 20K*3 = 60 K条记录。速度很难快啊。
先添加复合索引 (company_id ,id) ,这样可以提高一部分效率。

#7


这是很头痛的事情

#8


看来唯有另寻途径了

#9


如果不要求时时的,最准确的,可以找个没人用的时间,比如凌晨3点,让数据库跑一次,把记录保存到一个表里,需要的时候,在表中拿数据。

#10


我也有这样的问题
看看有没有解决哦

#11


找找我之前发的FAQ。里面有例子!

#1



select a.* from tablename a left join tablename b
on a.company_id=b.company_id and a.id>=b.id
group by a.id,a.name,a.company_id
having count(b.id)<=3
order by a.company_id,a.id;

#2


可以参考下贴。

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集...

#3


在百万级表里有好的解决方法吗?

#4


在百万级表里有好的解决方法吗?

假设记录 五百万 条,你不同的 company_id    有多少?

#5


最多一两万

#6


记录 五百万 条 中 不同的 company_id   两万
5M / 20K
然后 "相同company_id最多显示3条记录  " 也就是要输出 20K*3 = 60 K条记录。速度很难快啊。
先添加复合索引 (company_id ,id) ,这样可以提高一部分效率。

#7


这是很头痛的事情

#8


看来唯有另寻途径了

#9


如果不要求时时的,最准确的,可以找个没人用的时间,比如凌晨3点,让数据库跑一次,把记录保存到一个表里,需要的时候,在表中拿数据。

#10


我也有这样的问题
看看有没有解决哦

#11


找找我之前发的FAQ。里面有例子!