如何解决如何通过将一行与其下一行进行比较来填充新列
我在编写查询以获得所需的输出时遇到了困难。 我需要获取连续两行之间的日期差异,如果日期差异
我必须根据下面给出的标准使用值“是”或“否”填充新列
标准 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 | 是 | 是 |
解决方法
你需要一些窗口函数加上这样的 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。