以下查询中找到表中第n个最高值的逻辑是什么?
select *
from tablename as a
where (n-1) = (select count(distinct(column name)
from tablename as b
where b.columname > a.columnname)
示例查询:
select *
from tblperson a
where 3 = (select count(distinct(expenses))
from tblperson b
where b.Expenses > a.Expenses)
答案 0 :(得分:2)
您可以使用OFFSET FETCH Clause (SQL Server Compact)功能:
SELECT *
FROM tablename
ORDER BY expenses DESC
OFFSET N - 1 ROWS -- Nth highest (N-1 offset)
FETCH NEXT 1 ROWS ONLY;
答案 1 :(得分:0)
查询说明每一行都要计算表中有多少唯一值,其值(在特定列中)大于我正在查看的值。只保留那些落在某个位置的(可能的关系)。因此,对于第四名,您将期望找到3个更高的值。
这是通过称为相关子查询的内部查询来完成的。虽然服务器可能有更有效的方法来实际计算结果,但您可以将其视为一个带有函数调用的循环。对于外部查询中的每一行,内部查询在逻辑上执行一次,并且对于每次运行,其中a
的引用都是常量。
以这种方式重写可能有助于您理解。 (你也可以自己测试内部查询。)
select * from
(
select
a.columnname,
(
select count(distinct columnname)
from tablename as b
where b.columnname > a.columnname
) as NumRowsGreater
from tablename as a
) as t
where NumRowsGreater = (n-1)
答案 2 :(得分:0)
试试这个
select TOP 3 * FROM tblperson order by Expenses DESC
或者存储过程中的类似内容
select TOP @N * FROM tblperson order by Expenses DESC