sql - 甲骨文:SQL;当且仅当一列更改时选择不同的记录
问题描述
在此先感谢您的帮助。当且仅当另一列更改时,我需要创建一个查询来选择不同的列。但是,每条记录都有一个 date_code,它使每条记录都是唯一的。我想提取更改前的最后一条记录以及更改后的最后一条记录。
这是一个示例:带有帐号的客户记录,带有日期代码戳的公司名称。我想获得公司名称更改前的最后一条记录。即使客户返回公司,特定公司的客户的最后一条记录也将是最后日期代码。
表示例:
预期结果:
解决方案
您可以使用分析函数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 |
+---------+------------------+--------------+
推荐阅读
- javascript - 无法获得正确的相对路径 React
- javascript - 实现 BST 树重复键 - JS
- c++ - 无符号变量的默认值是多少?
- c++ - 来自长十六进制值的向量
- php - PHP中的.env文件没有输出
- c++ - 在我的 c++ builder 应用程序中包含 xmmintrin.h 的问题
- cakephp - cakephp4 中的 SweetAlert2 实现
- css - 无法识别用于在 rvest 中抓取的 html 节点
- typescript - Firebase 云交易并不总是完成
- python-3.x - 从 ox.projection.project_gdf(city,yerevan.crs) 获取 b'在初始化列表中没有参数'