Ich habe eine Aktivität changelog von Offizieren, die aktiv/inaktiv werden.Finden Sie Fehler in einer Sequenz
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
Im obigen Fall ist die Offizier-ID 1 vom 1. Mai bis zum 4. Mai aktiv.
Dies ist im Wesentlichen eine "Hauswirtschaft" Aufgabe. Die zweite Zeile ist nicht erforderlich und sollte gelöscht werden. Ich möchte dies innerhalb eines MySQL-Verfahrens tun, das ein Ereignis nach einem Zeitplan verknüpft. Ich brauche eine Abfrage, die diese Zeilen identifizieren kann, aber ich weiß nicht wie.
In einem früheren System hatte ich eine geordnete Liste durchlaufen und den aktuellen Wert mit dem Wert der vorherigen Zeile verglichen. Ich habe gelesen, dass Schleifen in MySQL nicht erwünscht sind, also versuche ich herauszufinden, wie man das nur mit Abfragen macht.
Ich habe versucht, die folgenden:
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;
Ich hatte gehofft, ich die Kriterien irgendwie einbinden konnte ich in die Notwendigkeit verbindet, aber ich bin ratlos. jede Hilfe würde sehr geschätzt werden. Diese
Dankes- für Ihre Eingabe. Am Ende hatte ich eine ähnliche Lösung wie Sie, aber wenn Sie mit mehr Daten arbeiten, kommt Ihre Lösung ungenau zurück. Ich bin daran interessiert zu verstehen, warum dies der Fall ist. Können Sie sich darüber Gedanken machen? – ShadeBlack
Verwenden Sie nach Möglichkeit die Geige, die ich angegeben habe, und fügen Sie einige Zeilen hinzu, um das falsche Verhalten zu replizieren. Es ist nicht sehr offensichtlich von den Screenshots. – Utsav