在具有M列的表中,我希望列J中包含第(n + 1)个最高值的行给出第J列的第n个最高值。如果没有第(n + 1)个最高值列J,然后查询应返回包含列J中第n个最高值的行。 我是否可以使用rownum或rank()?
使用单个查询来完成此操作例如在下表中,如果我想在B列上运行查询,
A B C
=============
1 3 4 -> ROW1
8 4 5 -> ROW2
9 5 2 -> ROW3
0 0 1 -> ROW4
QUERY(ROW1)=>返回ROW4,因为ROW4具有下一个最高值 Col B为0 QUERY(ROW2)=>返回ROW1,因为ROW1有下一个 Col B的最高值为3
但是如果我运行QUERY(ROW4),那么它应该返回ROW4本身 Col B没有其他较低的值。
下一个最高值是指以降序排序时的第N + 1个最高值。因此,最低值没有下一个最高值。
我可以使用单个查询执行此操作吗?
答案 0 :(得分:1)
这样的东西?
WITH subquery AS (
SELECT *,
ROW_NUMBER() OVER (ORDER BY ColumnJ DESC) AS row_id
FROM table_name
)
SELECT *
FROM subquery
WHERE row_id = CASE WHEN :required_rank = (SELECT MAX(row_id) FROM subquery)
THEN :required_rank
ELSE :required_rank + 1 END;
答案 1 :(得分:0)
你的意思是:
SELECT * FROM some_table
WHERE B IN (SELECT nvl(max(B), ?) FROM some_table WHERE B < ?)
SQLFiddle示例。