从预先排序的表中选择

时间:2016-04-03 18:40:22

标签: mysql sql

我想选择给定行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'为

1 个答案:

答案 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个第一个最好的结果。