sql - 选择不是错误创建的最准确的条目
问题描述
我有一个查询,我需要选择客户最近的正确案例,但我还需要能够选择客户以前的任何案例。我有我的查询,但是当我浏览数据时,我注意到一位客户有 3 个案例:
客户编号 | 案例ID | 案例状态 | 案例创建日期 |
---|---|---|---|
10079 | 2796 | 打开 | 2021 年 1 月 11 日 |
10079 | 2784 | 积极的 | 2021 年 1 月 9 日 |
10079 | 1867年 | 关闭 | 2020 年 1 月 29 日 |
我需要能够同时选择客户的“已关闭”和“活动”案例。“打开”案例是一个错误,不应存在于系统中,因为具有“活动”案例的客户端也不能有“打开”案例。数据库中有几个这样的实例,用于不同的客户端,我想知道,谁能帮我弄清楚如何使用 sql 来控制 oracle 数据库中的那些系统错误?请注意:并非所有“打开”案例都是系统错误:客户端不能同时拥有“活动”和“打开”案例。
解决方案
如果您只想在前面的状态不是“活动”时“打开”(一种阅读问题的方式,那么您可以使用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')
推荐阅读
- java - 找到 1 到 N 之间互为镜像的素数
- php - 扩展布局时,所有@yield 都会被渲染,而不是选择的@sections
- sql - WHERE 子句中的“等于 NULL”条件仍然允许查询执行和使用资源
- javascript - 将数组元素从一种形式格式化为另一种形式-JS
- c# - 我应该在 C# 中的所有枚举类型上使用 [Flags]
- scala - Scala Enumeration to HList with shapeless
- cmake - 如何为 qcc 编译器获取 cmake 生成 -std=c++14 标志
- javascript - 如何避免在子列表中调用回调函数
- mongodb - Mongodump 没有转储所有记录
- android - 如何在 Kotlin Android 的 DatePicker 中禁用未来日期