如何使用SQL查询不遵循预期模式的记录

时间:2019-02-15 19:54:54

标签: sql ms-access

我有一张看起来像这样的表:

ID | ACTION
1  | 'start'
2  | 'stop'
3  | 'start'
4  | 'stop'
5  | 'start'
...| ...

我的问题是,如果开始/停止模式中断(例如两次停止而中间没有开始,反之亦然),我如何用SQL查询检测?

我希望查询显示所有破坏模式的记录。您可以说,当有两个启动/停止操作时,您不能确定应该归咎于两个记录中的哪个,因此我想将两个记录都添加到查询中。

我知道如何使用VBA进行此操作,但是我看不到在查询中使用VBA的方法。

谢谢。

2 个答案:

答案 0 :(得分:0)

您希望下一行是相同类型或上一行是相同类型的任何行。

假设ID之间没有空格,则可以使用联接获取所需的信息:

select t.*
from (t as t left join
      t as tnext
      on tnext.id = t.id + 1
     ) left join
     t as tprev
     on tprev.id = t.id - 1
where t.action in (tprev.action, tnext.action);

答案 1 :(得分:0)

如果您的ID之间没有空格:

select * from tablename as t
where 
  action in (select action from tablename where id in (t.id - 1, t.id + 1))