我想选择给定行id的邻居,它可以工作:
SELECT * FROM names WHERE name_id = (select max(name_id) from names where name_id < 5)
但是我需要首先通过升序'name'来选择行,然后,从这个选择的邻居中尝试这个:
SELECT * FROM names WHERE name_id = (select max(name_id) from
(select * from names ORDER BY name)
)
names where name_id < 5
但这不起作用
表'name'的编号为'name_id',字符串'name'为
答案 0 :(得分:1)
我实际上不知道你想得到什么,但这一部分:
(select max(name_id) from
(select * from names ORDER BY name)
)
在您的示例中没有意义,因为它从名称表中选择了max(name_id),无论它是否有序都无关紧要。
(select max(name_id) from names
)
会给出相同的结果。并且您的第一个查询不返回具有给定id的邻居,而是具有max(name_id)的邻居,其id为&lt; 5.
也许你的意思是
SELECT name_id, name
FROM (
SELECT name_id, name, RANK() OVER( ORDER BY name_id DESC) AS position
FROM names)
WHERE position = 4;
?它应该返回具有第四大name_id的邻居
WHERE position < 5
应该返回4个第一个最好的结果。