标题: 先分组,再取每组前3名,如何实现呢 [打印本页] 作者: QQ6170372 时间: 2016-2-19 16:11 标题: 先分组,再取每组前3名,如何实现呢 先分组,再取每组前3名,如何实现呢作者: tmtony 时间: 2016-2-19 16:31
select top 3 字段 from 表 group by 字段
试试作者: QQ6170372 时间: 2016-2-19 17:13
这样取不了每组前3,取的是总体前3作者: 风中漫步 时间: 2016-2-20 09:26
看看你的数据作者: xuwenning 时间: 2016-2-22 08:55
select 字段 from 表 group by 字段查询
select top 3 字段 from查询 group by 字段 作者: xinrenq 时间: 2016-2-23 08:07
用SQL语句的方式呢,在ACCESS只能用Count计数嵌套子查询后,再来通过Where 来判断Count的大小来取数据,数据量小时还凑合,
如:
按name分组取最小的两个(N个)val
代码如下:
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.valselect a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name ----网上抄的。。
1、使用联合查询:
select top 3 字段 from 表
where xx=a
union
select top 3 字段 from 表
where xx=b
…………………………
select top 3 字段 from 表
where xx=n
2、创建一列,更新为序列号,再处理:
数据定义查询:alter 表 add Column 序号 long;
更新查询:Update 表 set 序号=Dcount("字段","表","字段="&[字段]);
选择查询:select * from 表 where 序号<=3;
3、ADO处理。分别创建2个记录集,一个为分组字段,另一个则以分组字段为条件。通过movenext的方法来完成第二个记录集的读取。
rst1.open "select distinct 字段 from 表",currentproject.connection,adOpenKeyset, adLockOptimistic
do until rst1.eof
rst2.open"select * from b "& where 字段='"& rst1(0)&"' order by 某字段",currentproject.connection,adOpenKeyset,adLockOptimistic
for i=1 to 3