Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL选择连续记录是有条件的_Mysql - Fatal编程技术网

MYSQL选择连续记录是有条件的

MYSQL选择连续记录是有条件的,mysql,Mysql,比如说 No Condition 1 NULL 2 O 3 NULL 4 NULL 5 NULL 6 NULL 7 NULL 8 O 9 NULL 10 NULL 11 NULL 1

比如说

No          Condition
1               NULL
2               O
3               NULL
4               NULL
5               NULL
6               NULL
7               NULL
8               O
9               NULL
10             NULL
11             NULL
12             O
想要选择带NULL条件的No的SQL是什么,它下面的两条记录也有NULL条件


对于此表,应选择3、4、5和9。

假设
no
是连续的,没有间隙(如示例数据中),则可以使用
join

select t.no
from t join
     t1
     on t1.no = t.no + 1 join
     t2
     on t2.no = t.no + 2
where t.condition is null and
      t1.condition is null and
      t2.condition is null;

假设
No
字段没有间隙(如问题中所示),在增加
No
值时自行加入表3次,并选择所有
条件
字段为空的记录:

select t1.No
from yourtable t1
inner join yourtable t2 on t1.No+1=t2.No
inner join yourtable t3 on t1.No+2=t3.No
where t1.Condition is null and t2.Condition is null and t3.Condition is null

一种选择是使用相关子查询来检索下两行的条件列的值。例如:

 SELECT t1.no
   FROM mytable t1
  WHERE t1.condition IS NULL
    AND ( SELECT (t2.condition IS NULL)
            FROM mytable t2
           WHERE t2.no > t1.no 
           ORDER BY t2.no
           LIMIT 0,1
        )
    AND ( SELECT (t3.condition IS NULL)
            FROM mytable t3
           WHERE t3.no > t1.no 
           ORDER BY t3.no
           LIMIT 1,1
        )
 ORDER BY t1.no 
这不一定能提供最佳性能。但这是有效的MySQL语法,它确实返回指定的结果集

这假设如果“否”列中存在间隙,目的是检查具有较高值的
No
的下两行。如果规范仅检查行
No+1
No+2
,则
>t1.No
可以替换为
=t1.No+1
=t1.No+2
,并将
限制1,1
替换为
限制0,1