读书人

按分类字段值取特定记录的前两条,该怎

发布时间: 2012-04-11 17:42:33 作者: rapoo

按分类字段值取特定记录的前两条
觉得表达得也不太正确,具体如下表:
id 分类
1 a
2 b
3 c
4 b
5 b
6 a
7 c
8 a
9 c
要取出记录(1、6)(2、4)(3、7),就是分类字段中等于a、b、c的记录的前两条,想找一个灵巧的方法。

[解决办法]
create table T(id int, type varchar(10))
insert T select 1, 'a '
union all select 2, 'b '
union all select 3, 'c '
union all select 4, 'b '
union all select 5, 'b '
union all select 6, 'a '
union all select 7, 'c '
union all select 8, 'a '
union all select 9, 'c '

select * from T as tmp
where (select count(*) from T where type=tmp.type and id <tmp.id) <2
order by type

--result
id type
----------- ----------
1 a
6 a
2 b
4 b
3 c
7 c

(6 row(s) affected)

[解决办法]
create table #t(id int identity,type char(1))

insert #t select 'a '
union all select 'b '
union all select 'c '
union all select 'b '
union all select 'b '
union all select 'a '
union all select 'c '
union all select 'a '
union all select 'c '

--执行结果
select t.*
from #t t,
(select type,max(id) Id
from #t
group by type) s
where t.type = s.type
and t.id < s.id

读书人网 >SQL Server

热点推荐