选择以跳过第一行和最后一行并在两者之间选择

时间:2015-02-12 08:18:15

标签: mysql sql

我试图跳过我的SQL查询中的第一行和最后一行(即在这种情况下跳过sequence=0sequence=4)但我的SQL查询似乎没有工作。知道为什么吗?逻辑似乎是正确的:

SELECT * FROM waypoint 
WHERE id NOT IN(
        (SELECT MIN(ID) FROM waypoint), 
        (SELECT MAX(ID) FROM waypoint)
      )
AND booking_id="1";

MY SQL FIDDLE IS HERE

3 个答案:

答案 0 :(得分:1)

你有7行。他们的id是1到7.你的not in子句过滤掉1和7.如果你想先用booking_id=1跳过,你应该将这个子句添加到子选择中:

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";

答案 1 :(得分:0)

您需要将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";

答案 2 :(得分:0)

我不知道它是否有效,我暂时无法在此测试,但你试过了吗

SELECT * FROM waypoint WHERE booking_id="1" ORDER BY ID LIMIT 2,COUNT(ID)

这可能更有效,因为你不需要两个子选择。