代码之家  ›  专栏  ›  技术社区  ›  Patrick

多次选择Top(X)

  •  4
  • Patrick  · 技术社区  · 14 年前

    对垃圾标题感到抱歉,但希望这能解释:

    给出表格

     name     |   data
    ---------------------
       1      |   1000
       1      |   2000
       1      |   3000
       2      |   1500
       2      |   2500
       2      |   3500
    

    我希望能够为按数据值排序的所有名称选择顶部(X)。因此,如果x=2,返回值将为

     name     |   data
    ---------------------
       1      |   2000
       1      |   3000
       2      |   2500
       2      |   3500
    
    2 回复  |  直到 14 年前
        1
  •  9
  •   Martin Smith    14 年前
    ;with cte AS
    (
    SELECT name, data, ROW_NUMBER() OVER (PARTITION BY name ORDER BY data DESC) AS RN
    FROM YourTable
    )
    SELECT name, data
    FROM cte 
    WHERE RN<=2
    ORDER BY name, data
    
        2
  •  2
  •   Gabriele Petrioli    14 年前

    一个稍微普遍的方法是( 未看到指定SQL Server的已编辑标记 )

    Select
      name, 
      data 
    From
      <table> tbl
    Where
      data In
         ( Select Top 2 Distinct
              data 
           From
              <table> 
           Where
              name = tbl.name
           Order By
              data Desc
         )