首页 > 解决方案 > 甲骨文:SQL;当且仅当一列更改时选择不同的记录

问题描述

在此先感谢您的帮助。当且仅当另一列更改时,我需要创建一个查询来选择不同的列。但是,每条记录都有一个 date_code,它使每条记录都是唯一的。我想提取更改前的最后一条记录以及更改后的最后一条记录。

这是一个示例:带有帐号的客户记录,带有日期代码戳的公司名称。我想获得公司名称更改前的最后一条记录。即使客户返回公司,特定公司的客户的最后一条记录也将是最后日期代码。

表示例: 表格数据示例

预期结果: 预期结果示例

标签: sqloracle

解决方案


您可以使用分析函数LAG/LEAD来计算下一行/上一行的值并将其与当前值进行比较。这也适用于许多其他数据库。

在这里拉小提琴

with q as (
  select a.*,
    lead(company_name, 1, '__')
      over(partition by customer_account order by datecode asc) as next_comp
  from cust_account a
)
select
  datecode,
  customer_account,
  company_name
from q
where company_name != next_comp
order by datecode asc

+---------+------------------+--------------+
|DATECODE | CUSTOMER_ACCOUNT | COMPANY_NAME |
+---------+------------------+--------------+
|20201104 | 10001000000004   | Apple        |
|20201106 | 10001000000004   | Microsoft    |
|20201108 | 10001000000004   | Google       |
|20201110 | 10001000000004   | Apple        |
+---------+------------------+--------------+

推荐阅读