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
12             O

想要选择具有NULL条件的No并且下面两个记录也具有NULL条件的SQL是什么?

对于这个表,应该选择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次,并选择所有Condition字段为空的记录:

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值较高的后面两行。如果规范只检查No+1No+2行,那么> t1.no可以替换为= t1.no + 1= t1.no + 2,并用LIMIT 0,1替换LIMIT 1,1

最新更新