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

我在编写查询以获得所需的输出时遇到了困难。 我需要获取连续两行之间的日期差异,如果日期差异

我必须根据下面给出的标准使用值“是”或“否”填充新列
标准 1
对于第一行,新列值应始终为“否” 从第二行开始,如果两个日期相差 第一行和第二行的日期差为 第二行和第三行的日期差异为 第三行和第四行的日期差异超过 6 个月,但有效为“是”,因此新列值为“否”。
输出应该如下图

Custid 输入日期 Rscode 有效 New_column
123 2020-04-11 BCB 没有
123 2020-06-13 ABC
123 2020-09-01 FBS 没有 没有
123 2021-05-01 ABC 没有
123 2021-07-05 ABC

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

Custid 输入日期 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
Custid 输入日期 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
jiemy666 回答:如何通过将一行与其下一行进行比较来填充新列

你需要一些窗口函数加上这样的 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
本文链接:https://www.f2er.com/3405.html

大家都在问