使用Microsoft SQL Server获取列的10个最高升序值

时间:2016-12-07 20:12:48

标签: sql sql-server greatest-n-per-group

我正在使用Microsoft SQL Server,并发现自己陷入了困境。我想基本上对订单做订单。我当前的SQL查询是:

SELECT top 10 labelid 
FROM mytable 
ORDER BY labelid DESC

这将按降序返回labelid列的前10个值。我想查询前10个值,并使结果按升序排列。

有没有一种简单的方法可以在不使用procedure / plsql / etc的情况下执行此操作?

3 个答案:

答案 0 :(得分:3)

您只需将查询用作派生表:

SELECT *
FROM (SELECT TOP 10 labelid 
      FROM mytable 
      ORDER BY labelid DESC) A
ORDER BY labelid;

答案 1 :(得分:1)

Lamak的解决方案很棒,派生表很有趣但是在使用Sql Server和其他具有它们的平台时组织代码的一种非常有用的方法是公用表表达式[CTE] 而你正在查找/学习并查看窗口函数,因为它们很有帮助。

;WITH cte AS (
    SELECT
       labelid 
       ,ROW_NUMBER() OVER (ORDER BY labelid DESC) as RowNum
    FROM
       mytable 
)

SELECT *
FROM
    cte
WHERE
    RowNum <= 10
ORDER BY
    lableid

答案 2 :(得分:0)

 Select * from (
  SELECT top 10 labelid FROM mytable ORDER BY labelid DESC) order by labelid