2015-01-29 5 views
0

SQL Developer를 사용 중이고 갱신 표시기를 만드는 방법을 찾으려고합니다. 정책 번호, 유효 날짜 및 만료 날짜가있는 테이블이 있습니다. 특정 정책의 유효 기간이 이전 행의 만료 날짜와 같으면 갱신되므로 "1"이됩니다. 새로운 발효 일이 없으면 정책이 갱신되지 않습니다. 아래 예에서 정책 12345와 12389는 "1"을, 정책 12367은 "0"을 가져야합니다. 어떻게해야합니까? 어떻게 든 PARTITION BY, ROWS PRECEDING 등을 사용합니까?파티션을 사용하여 이전 행에서 두 개의 서로 다른 열을 비교하려고합니다.

POLICY_NUMBER EFFECTIVE_DATE  EXPIRATION_DATE 
     12345   20140120   20140720 
     12345   20140720   20150120 
     12367   20140122   20140722 
     12389   20140122   20140722 
     12389   20140722   20150122 

답변

0

네, 맞습니다. by by by by and order by. 다음 검색어가 유용합니다.

SELECT A.POLICY_NUMBER , 
CASE WHEN A.EXPIRATION_DATE = B.EFFECTIVE_DATE THEN 1 ELSE 0 END AS ISRENEW 
FROM 
(
SELECT ROW_NUMBER() OVER(PARTITION BY POLICY_NUMBER ORDER BY POLICY_NUMBER) AS NUM1 , 
POLICY_NUMBER , EFFECTIVE_DATE , EXPIRATION_DATE 
FROM POLICYTABLE AS A 
) AS A 
LEFT OUTER JOIN 
(
SELECT ROW_NUMBER() OVER(PARTITION BY POLICY_NUMBER ORDER BY POLICY_NUMBER) AS NUM1 , 
POLICY_NUMBER , EFFECTIVE_DATE , EXPIRATION_DATE 
FROM POLICYTABLE AS A 
) AS B ON A.NUM1 = B.NUM1 - 1 AND A.POLICY_NUMBER = B.POLICY_NUMBER 
WHERE A.NUM1 = 1 
+0

영리합니다. 감사! – jo112358

+0

감사합니다. 우리의 응용 프로그램 중 하나에서 이러한 유형의 논리를 사용했습니다. –

관련 문제