我有一个活动更改日志的人员变成活动/不活动。在序列中查找错误
OfficerID ChangeTo ChangeDate
1 active 2017-05-01
1 active 2017-05-02
1 inactive 2017-05-04
6 active 2013-09-09
6 inactive 2016-04-14
6 recruit 2016-06-22
6 active 2016-06-23
6 inactive 2017-04-30
在上述情况下,主管身份证1从5月1日起至5月4日有效。
这实质上是一个'家务'任务。第二行不是必需的,应该删除。我想在一个按计划关联事件的MySQL过程中执行此操作。我需要一个可以识别这些行的查询,但我不知道如何。
在以前的系统中,我已经循环遍历一个有序列表,并将当前值与前一行的值进行比较。我已经读过,MySQL中的循环不受鼓励,所以我试图弄清楚如何仅仅通过查询来完成这些操作。
我试过如下:
SELECT
a.ActivityID, a.OfficerID, a.ChangeTo, a.ChangeDate
FROM
tbl_Officers_Activity as a
INNER JOIN tbl_Officers_Activity AS b
ON a.OfficerID = b.OfficerID
AND a.ChangeDate > b.ChangeDate
AND a.ChangeTo = b.ChangeTo
INNER JOIN tbl_Officers_Activity AS c
ON a.OfficerID = c.OfficerID
AND a.ChangeDate < c.ChangeDate
AND a.ChangeTo <> c.ChangeTo
ORDER BY
OfficerID,
ChangeDate;
我希望我能以某种方式嵌入我需要到连接的标准,但我不知所措。任何帮助将不胜感激。
感谢您的输入。我最终得到了一个类似于你的解决方案,但是当运行更多的数据时,你的解决方案返回不准确。我有兴趣了解为什么会出现这种情况。你有没有想过这件事? – ShadeBlack
如果可能,请使用我提供的小提琴并添加一些行来复制不正确的行为。从截图中看不太明显。 – Utsav