我正在使用 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
解决方案才是好的。
我认为你可以尝试以下方法:
SELECT * FROM employees WHERE id NOT IN ( SELECT MIN(id) AS first_id, MAX(id) AS last_id FROM employees ) ORDER BY id ASC;
如果有效请告诉我!