是取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
如果不满足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
Select * From TEST A
Where (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID) < 3
Select * From TEST A
Where Exists (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID Having Count(*) < 3)
(ID Int,
filed1 Varchar(10))
Insert TEST Select 1, 'A'
Union All Select 2, 'B'
Union All Select 3, 'C'
Union All Select 4, 'A'
Union All Select 5, 'B'
Union All Select 6, 'A'
Union All Select 7, 'C'
Union All Select 8, 'C'
Union All Select 9, 'C'
Union All Select 10, 'C'
Union All Select 11, 'A'
Union All Select 12, 'A'
Union All Select 13, 'B'
GO
--方法一
Select * From TEST A
Where (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID) < 3--方法二
Select * From TEST A
Where Exists (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID Having Count(*) < 3)
GO
Drop Table TEST
--Result
/*
1 A
2 B
3 C
4 A
5 B
6 A
7 C
8 C
13 B
*/
Select * From TEST A
Where Not Exists (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID Having Count(*) >= 3)其實都是差不多的
drop table tb
gocreate 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')
goselect 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 descdrop table tb/*
id filed1
----------- ----------
12 A
11 A
6 A
13 B
5 B
2 B
10 C
9 C
8 C(所影响的行数为 9 行)
*/
drop table tb
gocreate 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')
insert into tb(ID,filed1) values(14, 'D')
insert into tb(ID,filed1) values(15, 'D')
insert into tb(ID,filed1) values(16, 'E')
insert into tb(ID,filed1) values(17, 'F')
goselect 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 descdrop table tb
/*
id filed1
----------- ----------
12 A
11 A
6 A
13 B
5 B
2 B
10 C
9 C
8 C
15 D
14 D
16 E
17 F(所影响的行数为 13 行)*/
--用子查询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