0

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

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

卡斯蒂德 输入日期 代码 有效的 新列
123 2020-04-11 商业银行 是的
123 2020-06-13 美国广播公司 是的 是的
123 2020-09-01 胎牛血清
123 2021-05-01 美国广播公司 是的
123 2021-07-05 美国广播公司 是的 是的

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

卡斯蒂德 输入日期 代码 有效的 新列
345 2020-02-19 RQT 是的
345 2020-03-22 商业银行 是的
345 2020-06-18 RQT 是的 是的
345 2020-10-29 商业银行 是的 是的
345 2021-03-24 美国广播公司 是的 是的
卡斯蒂德 输入日期 代码 有效的 新列
346 2020-02-19 RQT 是的
346 2020-03-22 RQT 是的
346 2020-06-18 RQT 是的 是的
346 2020-10-29 商业银行 是的 是的
346 2021-03-24 RQT 是的 是的
4

1 回答 1

0

您需要一些窗口函数和 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
于 2021-08-04T08:51:21.640 回答