在SQL中排除顶部和底部的n行

gat*_*tor 1 mysql sql pdo

我正在尝试查询数据库,但不包括表中的第一行和最后一行.这是一个示例表:

id | val
--------
 1    1
 2    9
 3    3
 4    1
 5    2
 6    6
 7    4
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我首先要按顺序排序val,然后排除查询的第一行和最后一行.

id | val
--------
 4    1
 5    2
 3    3
 7    4
 6    6
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果集.注意第1行和第2行被排除,因为它们val分别具有最低和最高.

我已经考虑过LIMIT,TOP和其他一些东西,但无法得到我想要的结果.如果有一种方法可以做到这一点(甚至更好的是第一个/最后一个%而不是第一个/最后一个n),我无法弄明白.

Avi*_*dos 7

你可以尝试这个伴侣:

SELECT * FROM numbers
WHERE id NOT IN (
    SELECT id FROM numbers
    WHERE val IN (
        SELECT MAX(val) FROM numbers
    ) OR val IN (
        SELECT MIN(val) FROM numbers
    )
);
Run Code Online (Sandbox Code Playgroud)