请教关于单个表查询, 对于某条件重复的数据,只提取随机一条的问题.(简单的SQL查询语句)
有这么一个表:
tblStud(fId, fName, fAge, fClass) 说明:fId是主键,唯一编号,fName有可能重复,fAge, fClass只是表的一些其它信息.
由于fName 可能重复, 因此,我想得到这样一个表,四个字段都有,但姓名不重复, 对于姓名重复的记录,只取任意一条就可以了. 示例数据如下:
fId fName fAge fClass
1李军21大二
2张红21大三
3张三20大一
4李军22大三
5王五20大三
6张红22大三
需要得到的数据如下:
fId fName fAge fClass
1李军21大二
2张红21大三
3张三20大一
5王五20大三
"4"和"6"已经重复,因此不要.
自己的想法是:应该对fName 进行分组查询,可是用分组语句,只能得到"fName"这一列,其它的三个值没法得到,
试着用"top 1"也不行.
后来想着用: select * from tblStud where fId in( select fId from tblStud group by fName ) 呵呵,这条语句明显有问题,却不知道怎样解决..
想着用distinct 仍然不行..不知各位是怎样解决的? 最好能说说你们都是怎样分析的..
[解决办法]
use aggregate function,
select * from tblSud Where fId in (select min(fId) from tblStud group by fName)
[解决办法]
--任意选一条select * from tblStud a where fId=(select top 1 fId from tblStud where fName=a.fName order by newid())--取最大或最小select * from tblStud a where fId=(select min/*max*/(fId) from tblStud where fName=a.fName)
[解决办法]
select fID, fName, fAge, fClass
from tblStud
where fID = (select top 1 fID
from tblStud
where fName = A.fName)
[解决办法]
--按某一字段分组取最大(小)值所在行的数据--2007-10-23于杭州/*数据如下:name val memoa 2 a2(a的第二个值)a 1 a1--a的第一个值a 3 a3:a的第三个值b 1 b1--b的第一个值b 3 b3:b的第三个值b 2 b2b2b2b2b 4 b4b4b 5 b5b5b5b5b5*/--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a', 2, 'a2(a的第二个值)')