나는 활성/비활성이되는 임원의 활동 변경 내역을 가지고 있습니다.시퀀스에서 오류를 찾으십시오.
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
위의 경우, 임원 ID 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;
나는 조인에 필요한 기준을 어떻게 든을 포함 할 수 있습니다,하지만 난 손실에있어 :
나는 다음 시도했다. 어떤 도움이라도 대단히 감사하겠습니다. 그래서 처음에는 그것을 유도했다,MySQL이 row_Number
기능을 가지고 있지 않습니다
감사합니다 - 당신이 당신의 입력. 나는 당신과 비슷한 솔루션으로 끝났지 만, 더 많은 데이터로 실행하면 솔루션이 부정확 해졌습니다. 나는 이것이 왜 그런지 이해하는 데 관심이있다. 이 문제에 대해 어떤 생각을 할애 할 수 있습니까? – ShadeBlack
가능한 경우, 내가 준 바이올린을 사용하고 잘못된 동작을 복제하기 위해 일부 행을 추가하십시오. 스크린 샷에서는 그다지 명확하지 않습니다. – Utsav