所以我有一个日志表。行基本上是这样的:
id function
n init()
n+1 check()
n+2 done()
... repeat
但是有这样的问题:
id function
n init()
n+1 check()
n+2 done()
n+3 check() <-- should be init!
n+4 done()
如何找到仅在init-&gt; check-&gt; done-&gt; check-&gt;完成传染性订单时发生的行?基本上在行done()之后,它必须再次check()才能被选中。
有没有办法在1(或最小)查询中执行此操作? 性能不是问题。
答案 0 :(得分:3)
SELECT line2.*
FROM log line2
JOIN log line1
ON line2.id = line1.id + 1
WHERE line1.function = 'done()'
AND line2.function = 'check()'
我知道你说表现不是问题,但仍然;)
答案 1 :(得分:1)
使用:
SELECT l.*
FROM LOG l
WHERE l.function = 'check()'
AND EXISTS(SELECT NULL
FROM LOG t
WHERE t.function = 'done()'
AND t.id = l.id-1)
...获取在done()之后的check()行,并且看起来应该是“init()”。