表结构如下:
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条记录方法征集...
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集...
#3
在百万级表里有好的解决方法吗?
#4
在百万级表里有好的解决方法吗?
假设记录 五百万 条,你不同的 company_id 有多少?
假设记录 五百万 条,你不同的 company_id 有多少?
#5
最多一两万
#6
记录 五百万 条 中 不同的 company_id 两万
5M / 20K
然后 "相同company_id最多显示3条记录 " 也就是要输出 20K*3 = 60 K条记录。速度很难快啊。
先添加复合索引 (company_id ,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条记录方法征集...
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集...
#3
在百万级表里有好的解决方法吗?
#4
在百万级表里有好的解决方法吗?
假设记录 五百万 条,你不同的 company_id 有多少?
假设记录 五百万 条,你不同的 company_id 有多少?
#5
最多一两万
#6
记录 五百万 条 中 不同的 company_id 两万
5M / 20K
然后 "相同company_id最多显示3条记录 " 也就是要输出 20K*3 = 60 K条记录。速度很难快啊。
先添加复合索引 (company_id ,id) ,这样可以提高一部分效率。
5M / 20K
然后 "相同company_id最多显示3条记录 " 也就是要输出 20K*3 = 60 K条记录。速度很难快啊。
先添加复合索引 (company_id ,id) ,这样可以提高一部分效率。
#7
这是很头痛的事情
#8
看来唯有另寻途径了
#9
如果不要求时时的,最准确的,可以找个没人用的时间,比如凌晨3点,让数据库跑一次,把记录保存到一个表里,需要的时候,在表中拿数据。
#10
我也有这样的问题
看看有没有解决哦
看看有没有解决哦
#11
找找我之前发的FAQ。里面有例子!