【问题标题】:How to populate new column by comparing one row with its next row如何通过将一行与其下一行进行比较来填充新列
【发布时间】:2021-10-06 23:02:07
【问题描述】:

我发现很难编写查询以获得所需的输出。 我需要获取两个连续行之间的日期差异,如果日期差异

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

Custid enter_date Rscode Valid New_column
123 2020-04-11 BCB Yes No
123 2020-06-13 ABC Yes Yes
123 2020-09-01 FBS No No
123 2021-05-01 ABC Yes NO
123 2021-07-05 ABC Yes Yes

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

Custid enter_date Rscode Valid New_column
345 2020-02-19 RQT Yes NO
345 2020-03-22 BCB Yes NO
345 2020-06-18 RQT Yes Yes
345 2020-10-29 BCB Yes Yes
345 2021-03-24 ABC Yes Yes
Custid enter_date Rscode Valid New_column
346 2020-02-19 RQT Yes NO
346 2020-03-22 RQT Yes NO
346 2020-06-18 RQT Yes Yes
346 2020-10-29 BCB Yes Yes
346 2021-03-24 RQT Yes Yes

【问题讨论】:

  • 当问题是关于 teradata 时,您为什么要使用 Oracle 进行标记?

标签: oracle oracle11g teradata teradata-sql-assistant teradatasql


【解决方案1】:

你需要一些窗口函数和这样的 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

【讨论】:

  • 非常感谢它的工作,但如果 R​​QT 后面跟着 RQT,那么新列应该是“否”但新列显示“是”,在第二个标准中,我用 RQT 替换了 BCB 并对其进行了测试。第二行的新列显示“是”。
  • 我的查询完全返回您为示例数据指定的结果。如果还有其他问题,您应该添加更多详细信息。
  • 是的,您给定的正确查询对于指定的示例数据运行良好,我在标准 2 下添加了新示例(custid 346)。
  • 也适用于 346,请参阅 sqlfiddle.com/#!17/8f7fae
  • 抱歉,我给出了错误的示例数据,并且我对 custid 346 的数据进行了一次更改,如果第五行是“RQT”,我将第四行的新列值设为“NO”。跨度>
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 2019-10-17
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多