假设100是一个开始事件,101是一个结束事件。它们应该交替出现,我想找出它们没有按照这种方式出现的情况。每个开始事件都应该有一个先前的结束事件。给定以下表格:
ID EVENT_ID
10 100 // a start event
11 101 // a stop event
12 99 // some irrelevant event
13 100 // .. and so on:
14 101
15 100
16 99 // some irrelevant event
17 100 // <-- duplicate event: bad
18 100 // <-- duplicate event: bad again.
19 101
我忘记了DATETIME列。
如何找到#15和#17,考虑到起始点不能连续出现两次?
结果应该以以下形式呈现:
EVENT_ID FROM_ID FROM_DATETIME UPTO_ID UPTO_DATETIME
100 15 2014-01-01 14:00 17 2014-01-01 16:00
我认为可以这样实现:
- 使用子查询仅查找按DATETIME排序的事件100,101。
- 按EVENT_ID分组,使用
count()
查找重复项。...但我怀疑这不能折叠结果,因为分组会忽略排序,
...而且我不知道如何获取两个(或多个!)对应的DATETIME值。
在MySQL中是否可能找到此内容?我可以在PHP中处理此问题,但我宁愿避免这种情况。