希望使用分区来比较前一行中的两个不同列

Looking to use Partitions to Compare Two Different Columns on Previous Rows

我正在使用 SQL Developer 并且正在尝试找到一种创建更新指示器的方法。我有一个 table,其中包含保单编号、生效日期和到期日期。如果某项保单的新生效日期与前一行的到期日期相同,则它应该得到“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

是的,你是对的,你需要使用partition by和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