부서간에 전송되는 그림 헬프 데스크 티켓. 티켓이 열려있는 각 티켓에 대해 하루 말에 부서가 무엇인지 알고 싶습니다. 이 표에는 부서에 변경 사항이있는 각 티켓에 대한 각 티켓의 마지막 부서가 포함되어 있습니다 (티켓을 처음 연 날짜와 마감 날짜에 대한 행 포함). 데이터 테이블은 다음과 같습니다.
CREATE TABLE TicketAssigment (
TicketId INT NOT NULL,
AssignedDate DATE NOT NULL,
DepartmentId INT NOT NULL);
필요한 것은 Date로 정렬 된 이전 TicketAssigment 행의 DepartmentId를 사용하여 각 TicketId에 대해 누락 된 날짜를 채우는 것입니다.
TicketAssigment 행이 다음과 같은 경우 :
1, '1/1/2016', 123 -- Opened
1, '1,4,2016', 456 -- Transferred and closed
2, '1/1/2016', 25 -- Opened
2, '1/2/2016', 52 -- Transferred
2, '1/4/2016', 25 -- Transferred and closed
나는이 출력을 원한다 :
1, '1/1/2016', 123
1, '1/2/2016', 123
1, '1/3/2016', 123
1, '1/4/2016', 456
2, '1/1/2016', 25
2, '1/2/2016', 52
2, '1/3/2016', 52
2, '1/4/2016', 25
이것은 내가 필요한 것에 가깝게 보이지만 끝내기 위해 인내심이 없었으며 예상 계획 비용은 6 자리입니다.
SELECT l.TicketId, c.Date, MIN(l.DepartmentId)
FROM dbo.Calendar c
OUTER APPLY (SELECT TOP 1 TicketId, DepartmentId FROM TicketAssigment WHERE AssignedDate <= c.Date ORDER BY AssignedDate DESC) l
WHERE c.Date <= (SELECT MAX(AssignedDate) FROM TicketAssigment)
GROUP BY l.TicketId, c.Date
ORDER BY l.TicketId, c.Date;
LAG와 창 프레임을 사용 하여이 작업을 수행 할 수있는 방법이 있다고 생각하지만 잘 이해하지 못했습니다. 요구 사항을 충족시키는보다 효율적인 방법은 무엇입니까?