2017-12-13 2 views
0

업데이트하기 전에 다음과 같은 데이터가 있습니다. "업데이트 후"이미지처럼 보이는 최종 결과를 얻으려고합니다. 강조 표시된 셀SQL에서 이전 레코드 값을 사용합니다.

1 - 이전 행의 종료 날짜 열을 다음 행의 시작 날짜로 채워야합니다. 지연 및 리드 기능이없는 SQL Server 2008을 사용하고 있습니다.

2 - 또한

CarryoverFrom = the ID of the previous not immediate PREMIUM row 
CarryoverFrom2 = the ID of the immediate previous PREMIUM row 
CarryoverAppliedTo = Sum of the Carryover amount of the previous PREMIUM rows 

을 다음과 같이 현재 GOLD 행을 작성해야 ** 참고 만 GOLD 행 후 발생 이전 PREMIUM 행 각 GOLD 행을 다룬다. 단 PREMIUM 행 ID 4 아닌 프리미엄 ID 2 행 2

--BEFORE UPDATE enter image description here

--AFTER의 UPDATE enter image description here

+0

'LAG, LEAD'가 없으면 자체 조인이 옵션 중 하나입니다. 너 해봤 어? –

답변

0

예는 ID 5 행 편 LAG 또는 LEAD이 없으면 행 번호별로 자체 조인 할 수 있습니다. 항목 1의 경우 다음과 같습니다.

UPDATE A SET [End Date] = NextRecords.[Start Date] FROM 
(SELECT *, ROW_NUMBER() OVER (ORDER BY [Start Date]) rownum FROM [table]) A 
INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY [Start Date]) rownum FROM [table]) NextRecords 
ON A.rownum + 1 = NextRecords.rownum 

항목 2는 비슷하지만 조금 더 정교합니다.

관련 문제