我正在使用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 :(得分:0)
是的,你是对的,你需要使用分区依据和排序依据。以下查询适用于您:
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