有一个表,其中id是自动编号,s_id 为数字,现在想根据s_id的由大到小的顺序取出前3个不重复的name,并按s_id的由大到小的顺序排列,该如何写语句?
id   name  s_id1    AAA   21
2    BBB   21
3    CCC   21
4    AAA   23
5    BBB   23
6    CCC   23
7    DDD   25
8    EEE   32
9    CCC   55
10   FFF   11
11   GGG   34
12   HHH   34
13   BBB   34

解决方案 »

  1.   

    Select * from TableName A 
    Where Not Exists(Select 1 from TableName Where s_id=A.s_id And id<A.id Having Count(*)>2)  Order By s_id,id
      

  2.   

    SELECT to 3 NAME FROM (SELECT * from table1 ORDER BY s_id ) bb GROUP BY name
      

  3.   

    select top 3 s_id,name from table1 group by name order by s_id  desc
      

  4.   

    上面两为的都不行啊。paoluo(一天到晚游泳的鱼) 取出来的还有是重复的,woxiangfang(小黑黑脸)出现这样的错误提示“除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。”
      

  5.   

    可能我沒明白你的意思。上面列出的是你的結果,還是你的數據??你是要取三條數據??還是每組s_id 取三條數據??
      

  6.   

    如果是我說的第一種。Try:Select Top 3 Name from TableName A 
    Where Not Exists (Select 1 from TableName Where name=A.name) 
    Order By s_id Desc
      

  7.   

    更正一下:
    select top 3 name,max(s_id) mm from table1
     group by name order by mm desc
      

  8.   

    xiaonvjing(飞扬) 正解,谢谢大家了
      

  9.   

    暈死,漏了條件。怪不得有問題。
    Select Top 3 Name from TEST A 
    Where Not Exists (Select * from TEST Where Name=A.name And id<>A.id) 
    Order By s_id Desc
      

  10.   


    SELECT TOP 3 [NAME],[S_ID] FROM (SELECT [NAME],MAX(S_ID) AS S_ID FROM TABLE1 GROUP BY [NAME]) W ORDER BY S_ID DESC