SELECT跳过第一行和最后一行并在两者之间选择
问题描述:
我试图跳过我的SQL查询中的第一行和最后一行(即跳过这里的sequence=0
和sequence=4
),但我的SQL查询似乎不是加工。任何想法为什么?逻辑似乎是正确的:SELECT跳过第一行和最后一行并在两者之间选择
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint),
(SELECT MAX(ID) FROM waypoint)
)
AND booking_id="1";
答
您有7行。其ID的距离。如果你想跳过第一个和最后与booking_id=1
1至7你012条款筛选出1和7你应该将这个子句添加到子查询:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint where booking_id="1"),
(SELECT MAX(ID) FROM waypoint where booking_id="1")
)
AND booking_id="1";
答
你需要复制你的第二部分您的where
子句放入您的not in
子句的选择中,因为每个select
都是为其自己处理的,并且可以访问整个数据集。所以您需要将限制逻辑添加到每个select
。否则,你的MAX(ID)
将返回7,因为它可以访问整个数据集:
SELECT * FROM waypoint
WHERE id NOT IN(
(SELECT MIN(ID) FROM waypoint where booking_id="1"),
(SELECT MAX(ID) FROM waypoint where booking_id="1")
)
AND booking_id="1";
答
我不知道,如果它的工作原理,我不能在这里测试它的那一刻,但你尝试过
SELECT * FROM waypoint WHERE booking_id="1" ORDER BY ID LIMIT 2,COUNT(ID)
这可能更多的穿孔,因为你不需要两个subselects。
不错的想法,但你不能那样做 – Strawberry 2015-02-12 08:47:09