此命令选择同一表中存在事件编号较低但日期较高的记录的任何记录。
SELECT * FROM TableName T1 WHERE EXISTS
(SELECT * FROM TableName T2
WHERE T2.Incident < T1.Incident AND T2.Date > T1.Date)
这个稍微复杂一点的命令将只查找“双向”中无序的记录,这意味着它们在文件中较早有一个较晚日期的记录,而在文件后面有一个较早日期的记录。这避免了在文件中很早的记录中出现错误会使所有后续记录出现乱序的情况。但是,它不会在事件数最低或最高的两条记录中发现问题。
SELECT * FROM TableName T1 WHERE EXISTS
(SELECT * FROM TableName T2
WHERE T2.Incident < T1.Incident AND T2.Date > T1.Date)
AND EXISTS
(SELECT * FROM TableName T2
WHERE T2.Incident > T1.Incident AND T2.Date < T1.Date)
最后,正如 ruakh 在评论中指出的那样,上面的查询为您提供了所有乱序记录。尽管从技术上讲,您想要的是很难在日期链中找到“破损点”。以下查询将只为您提供链混乱的记录,不需要 IncidentID 单调增加,并允许删除事件。
SELECT * FROM TableName T1 WHERE
Date < (SELECT Date FROM TableName T2 WHERE T2.IncidentID =
(SELECT MAX(IncidentID) FROM TableName T3 WHERE T3.IncidentID < T1.IncidentID))
OR Date > (SELECT Date FROM TableName T2 WHERE T2.IncidentID =
(SELECT MAX(IncidentID) FROM TableName T3 WHERE T3.IncidentID > T1.IncidentID))
(未测试,因为我手边没有 MySQL 的副本)。