是取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

解决方案 »

  1.   

    --方法一
    Select * From TEST A
    Where (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID) < 3
      

  2.   

    --方法二
    Select * From TEST A
    Where Exists (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID Having Count(*) < 3)
      

  3.   

    Create Table TEST
    (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
    */
      

  4.   

    --方法三
    Select * From TEST A
    Where Not Exists (Select Count(*) From TEST Where filed1 = A.filed1 And ID < A.ID Having Count(*) >= 3)其實都是差不多的
      

  5.   

    if object_id('pubs..tb') is not null
       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 行)
    */
      

  6.   

    if object_id('pubs..tb') is not null
       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 行)*/
      

  7.   


    --用子查询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