//Temp1中是唯一的F2以及对应的F1的最小值。 select Min(F1) as F1, F2 as F2 into #Temp1 From AAA group by F2 select distinct a.F1,a.F2,a.F3 From AAA a, #Temp1 b where a.F1=b.F1 and a.F2=b.F2 drop table #temp1.如果F1,F2定下来之后F3仍不唯一,那么 select distinct a.F1,a.F2,Min(a.F3) From AAA a, #Temp1 b where a.F1=b.F1 and a.F2=b.F2 group by a.F1, a.F2如果是SQL2000,可以将虚表嵌入查询语句一次搞定
我在Google上找到答案 select f1,f2,f3 from table where f1 in (select min(f1) from table group by f2) 我试过,速度最快、最简洁 与兄弟们共享 唯一遗憾的是,不能获得f2重复的行数 那个子查询要是能这么写就好啦 select min(f1),count(f1) from table group by f2
一般来说,在表A中有若干字段C1,...Cn,现在要为每个不同的Ci,要返回表中的一条记录,而只选取次序OrderString= C1,C2desc,...Ci-1,Ci+1,...Cn中最前面的记录,可以采用下面的方法: 1建立一个临时表,包含自增字段id以及表A中的所有字段。 如create table #Buffer(id int identity, C1,C2,...Cn) ; 将表A中的内容按照OrderString导入临时表中。 insert into #Buffer(C1,C2,...Cn) select * from A order by OrderString ; 2这样所要做的就是从#Buffer中对每个Ci的不同值,选取最小的id所对应的记录。 如 select Min(id) as id, Ci into #temp1 from #Buffer group by Ci select C1,C2,...Cn From #Buffer a, #temp1 b where a.id=b.id. 变态吧?不过也是一种方法:)
inner join youTable B on A.f1 > B.f1 and A.f2 = B.f2
where ...
insert AAA values(2, 7, 121)
insert AAA values(3, 3, 143)
insert AAA values(4, 9, 152)
insert AAA values(5, 4, 169)
insert AAA values(6, 0, 178)
insert AAA values(7, 3, 179)
insert AAA values(8, 9, 180)
insert AAA values(9, 4, 181)
insert AAA values(10, 0, 182)select f1, f2, f3
from AAA
where f1 in(select Min(f1) from AAA group by f2)
select Min(F1) as F1, F2 as F2 into #Temp1 From AAA group by F2
select distinct a.F1,a.F2,a.F3 From AAA a, #Temp1 b where a.F1=b.F1 and a.F2=b.F2
drop table #temp1.如果F1,F2定下来之后F3仍不唯一,那么
select distinct a.F1,a.F2,Min(a.F3) From AAA a, #Temp1 b where a.F1=b.F1 and a.F2=b.F2
group by a.F1, a.F2如果是SQL2000,可以将虚表嵌入查询语句一次搞定
select f1,f2,f3 from table where f1 in (select min(f1) from table group by f2)
我试过,速度最快、最简洁
与兄弟们共享
唯一遗憾的是,不能获得f2重复的行数
那个子查询要是能这么写就好啦
select min(f1),count(f1) from table group by f2
1建立一个临时表,包含自增字段id以及表A中的所有字段。
如create table #Buffer(id int identity, C1,C2,...Cn) ;
将表A中的内容按照OrderString导入临时表中。
insert into #Buffer(C1,C2,...Cn) select * from A order by OrderString ;
2这样所要做的就是从#Buffer中对每个Ci的不同值,选取最小的id所对应的记录。
如 select Min(id) as id, Ci into #temp1 from #Buffer group by Ci
select C1,C2,...Cn From #Buffer a, #temp1 b where a.id=b.id.
变态吧?不过也是一种方法:)