如何跳过第一个和最后一个 SQL 结果?

问题描述 投票:0回答:1

我正在使用 https://sqlime.org/#demo.db 所以让我们假设 sqlite3 语法。不过我很高兴听到其他 SQL 风格的答案。

我正在运行以下查询:

SELECT * FROM employees ORDER BY id ASC LIMIT 10

如何跳过第一个和最后一个 SQL 结果?

我知道我可以使用

OFFSET
来删除第一个:

SELECT * FROM employees ORDER BY id ASC LIMIT 10 OFFSET 1

但这是我想出的唯一解决方案来删除最后一个:

WITH data AS (SELECT * FROM employees ORDER BY id DESC LIMIT 10 OFFSET 1)
SELECT * FROM data ORDER BY id ASC LIMIT 10 OFFSET 1

所以我对第一个进行排序并跳过,然后反向排序并跳过第一个。这给了我我想要的,但感觉可能有一个更优雅的解决方案。有人知道更简单的方法吗?

请注意,理论上我可以使用

LIMIT
来实现此目的。但我不知道有多少行,并且只有当
LIMIT
保证限制结果时,
LIMIT
解决方案才是好的。

sql sqlite
1个回答
1
投票

我认为你可以尝试以下方法:

SELECT * FROM employees WHERE id NOT IN ( SELECT MIN(id) AS first_id, MAX(id) AS last_id FROM employees ) ORDER BY id ASC;

如果有效请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.