日期:2014-05-19  浏览次数:20483 次

高分问个sql语句
是取3条A的记录3条B的3条C的记录
如果不满足3那取最多的记录.根据id倒序取.id是自增的。
filed1里面的内容是不确定的.有可能是d,e,f,g
ID     filed1
1         A
2         B
3         C
4         A
5         B
6         A
7         C
8         C
9         C
10       C
11       A
12       A
13       B
得到结果
1         A
2         B
3         C
4         A
5         B
6         A
7         C
13       B


------解决方案--------------------
樓主結果好象不正確?少了一個C,這裡只有兩個.
------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(ID int, filed1 varchar(10))
insert into tb(ID,filed1) values(1 , 'A ')
insert into tb(ID,filed1) values(2 , 'B ')
insert into tb(ID,filed1) values(3 , 'C ')
insert into tb(ID,filed1) values(4 , 'A ')
insert into tb(ID,filed1) values(5 , 'B ')
insert into tb(ID,filed1) values(6 , 'A ')
insert into tb(ID,filed1) values(7 , 'C ')
insert into tb(ID,filed1) values(8 , 'C ')
insert into tb(ID,filed1) values(9 , 'C ')
insert into tb(ID,filed1) values(10, 'C ')
insert into tb(ID,filed1) values(11, 'A ')
insert into tb(ID,filed1) values(12, 'A ')
insert into tb(ID,filed1) values(13, 'B ')
go

select id,filed1 from tb a where id in (select top 3 id from tb b where a.filed1=b.filed1 order by b.id desc)
order by filed1 , id desc

drop table tb

/*
id filed1
----------- ----------
12 A
11 A
6 A
13 B
5 B
2 B
10 C
9 C
8 C

(所影响的行数为 9 行)
*/
------解决方案--------------------

--用子查询

select id,filed1
from 表名 as a
where id in (select top 3 id from 表名 where filed1=a.filed1 order by id desc)
order by filed1 , id desc