首页 > 解决方案 > 选择不是错误创建的最准确的条目

问题描述

我有一个查询,我需要选择客户最近的正确案例,但我还需要能够选择客户以前的任何案例。我有我的查询,但是当我浏览数据时,我注意到一位客户有 3 个案例:

客户编号 案例ID 案例状态 案例创建日期
10079 2796 打开 2021 年 1 月 11 日
10079 2784 积极的 2021 年 1 月 9 日
10079 1867年 关闭 2020 年 1 月 29 日

我需要能够同时选择客户的“已关闭”和“活动”案例。“打开”案例是一个错误,不应存在于系统中,因为具有“活动”案例的客户端也不能有“打开”案例。数据库中有几个这样的实例,用于不同的客户端,我想知道,谁能帮我弄清楚如何使用 sql 来控制 oracle 数据库中的那些系统错误?请注意:并非所有“打开”案例都是系统错误:客户端不能同时拥有“活动”和“打开”案例。

标签: sqloracle

解决方案


如果您只想在前面的状态不是“活动”时“打开”(一种阅读问​​题的方式,那么您可以使用lag()一些过滤逻辑:

select t.*
from (select t.*,
             lag(case_status) over (partition by client_id order by created_date) as prev_case_status
      from t
     ) t
where status <> 'open' or
      (prev_status is null or prev_status <> 'active')

推荐阅读