Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取前n个百分比查询中的最后一条记录_Sql_Sql Server - Fatal编程技术网

Sql 获取前n个百分比查询中的最后一条记录

Sql 获取前n个百分比查询中的最后一条记录,sql,sql-server,Sql,Sql Server,我试图在我的数据中找到某些百分位数的界限,即10%的分数是多少,因此,要进入前10%的分数,人们必须超过多少 我可以通过运行以下查询获得该值: SELECT TOP 10 PERCENT [Time] FROM Scores WHERE Lesson = 1 ORDER BY [Time]; 。。。然后引用最后返回的记录 有人知道我可以运行什么查询来直接获取该值吗?ORDERBY子句似乎导致了所有问题,因为我无法将上面的语句作为子查询运行,而且它已经是查询的一个组

我试图在我的数据中找到某些百分位数的界限,即10%的分数是多少,因此,要进入前10%的分数,人们必须超过多少

我可以通过运行以下查询获得该值:

SELECT TOP 10 PERCENT [Time] 
    FROM Scores 
    WHERE Lesson = 1 
    ORDER BY [Time];
。。。然后引用最后返回的记录

有人知道我可以运行什么查询来直接获取该值吗?ORDERBY子句似乎导致了所有问题,因为我无法将上面的语句作为子查询运行,而且它已经是查询的一个组成部分,这一事实阻止了使用它来获取底部记录。我相信一定有一个简单的方法


提前感谢。

您可以使用外部查询来选择顶行:

SELECT  TOP 1 Time
FROM    (    
        SELECT  TOP 10 PERCENT [Time] 
        FROM    Scores 
        WHERE   Lesson = 1 
        ORDER BY 
                Time
        ) as Top10
 ORDER BY
        Time DESC

您可以使用外部查询选择顶行:

SELECT  TOP 1 Time
FROM    (    
        SELECT  TOP 10 PERCENT [Time] 
        FROM    Scores 
        WHERE   Lesson = 1 
        ORDER BY 
                Time
        ) as Top10
 ORDER BY
        Time DESC
这将在前10%的值上返回[Time]的最小值


这将返回前10%值的最小[时间]值,谢谢。唯一的问题是,因为我使用的是SQL Server(2008),我必须为子查询添加一个别名,所以在结束括号后,我添加了“AS Top10”。我的错是没有说明我在用什么。再次感谢@BinarySolo:大多数数据库都是这样,答案已编辑;)行得通,谢谢。唯一的问题是,因为我使用的是SQL Server(2008),我必须为子查询添加一个别名,所以在结束括号后,我添加了“AS Top10”。我的错是没有说明我在用什么。再次感谢@BinarySolo:大多数数据库都是这样,答案已编辑;)谢谢,这个有效,只是在这种情况下我需要的是MAX而不是MIN。我想知道哪个更快,这个还是Andomar的?谢谢,这个有效,只是在这种情况下我需要的是MAX而不是MIN。我想知道哪个更快,这个还是Andomar的?