如何通过比较一行与下一行来填充新列

How to populate new column by comparing one row with its next row

我发现很难编写查询来获得所需的输出。 我需要获取两个连续行之间的日期差异,如果日期差异 <=6 个月且原因代码有效“是”,则新列应填充值“是”,否则为“否”

我必须根据下面给出的标准用值“是”或“否”填充新列
标准 1:
对于第一行,新列值应始终为“否” 从第二行开始,如果两个日期差异 <=6 个月并且原因代码有效,则新列值应为“是”,否则为“否”
第一行和第二行的日期差异 <=6 个月并且代码有效“是”因此新列值为是。
第二行和第三行的日期差异 <=6 个月但有效为“否”因此新列值为“否”。
第三行和第四行的日期差异超过 6 个月,但有效为“是”,因此新列值为“否”。
输出应如下所示

卡斯蒂德 enter_date Rscode 有效 New_column
123 2020-04-11 BCB 没有
123 2020-06-13 ABC
123 2020-09-01 胎牛血清 没有 没有
123 2021-05-01 ABC 没有
123 2021-07-05 ABC

条件 2:
如果原因代码以“RQT”开头并且任何有效代码后跟 RQT(偶数日期差异为 6 个月且原因代码有效),则新列应从下一个连续行开始为“否”,输出与是。

卡斯蒂德 enter_date Rscode 有效 New_column
345 2020-02-19 RQT 没有
345 2020-03-22 BCB 没有
345 2020-06-18 RQT
345 2020-10-29 BCB
345 2021-03-24 ABC
卡斯蒂德 enter_date Rscode 有效 New_column
346 2020-02-19 RQT 没有
346 2020-03-22 RQT 没有
346 2020-06-18 RQT
346 2020-10-29 BCB
346 2021-03-24 RQT

您需要一些 Window 函数和 CASE,如下所示:

case 
       -- If reason code is starts with "RQT"
  when first_value(Rscode) over (partition by custid order by enter_date) = 'RQT'
       -- and any of the valid code is followed By RQT
   and lead(Rscode) over (partition by custid order by enter_date) = 'RQT' then 'No'

       -- If two dates difference is <=6 moths and reason code is valid then new column value should be "Yes" other wise "No"
  when enter_date <= add_months(lag(enter_date) over (partition by custid order by enter_date), 6)
   and valid = 'Yes'
    then 'Yes'

  else 'No' -- also covers: For first row, New column value should be always "No"
end