查询以仅提取失败的记录

Posted

技术标签:

【中文标题】查询以仅提取失败的记录【英文标题】:Query to extract only records which have failed 【发布时间】:2020-05-31 23:08:44 【问题描述】:

我在为下表编写 SQL 时需要帮助。我有一个包含两列(名称和状态)的表。

Name    Status
Kevin   success 
Mark    fail 
Mark    success 
Mike    success 
Yann    fail 
Yann    success 
George  fail
Boi     Fail

从上表中,我想只提取失败的记录以及失败然后成功的记录。基本上我想排除刚刚成功的记录。

【问题讨论】:

请向我们展示您的尝试 - SO 不是代码编写服务。 【参考方案1】:

基本上我想排除刚刚成功的记录。

如果您想要name 至少有一个非'success' 状态的所有记录,您可以使用exists

select t.*
from mytable t
where exists(
    select 1 from mytable t1 where t1.name = t.name and t1.status <> 'success'
)

或者,如果您想要一个至少具有一个非'success' 状态的names 列表,那么您可以使用聚合和带有having 子句的过滤器:

select name
from mytable
group by name
having max(case when status <> 'success' then 1 else 0 end) = 1

【讨论】:

【参考方案2】:

另一种选择是使用WITH TIES

不清楚您是想要所有记录还是只需要不同的名称

示例

Declare @YourTable Table ([Name] varchar(50),[Status] varchar(50))
Insert Into @YourTable Values 
 ('Kevin','success')
,('Mark','fail')
,('Mark','success')
,('Mike','success')
,('Yann','fail')
,('Yann','success')
,('George','fail')
,('Boi','Fail')

Select top 1 with ties *
 From @YourTable
 Order By min(case when status='Fail' then 0 else 1 end) over (partition by [Name] )

退货

Name    Status
Boi     Fail
George  fail
Mark    fail
Mark    success
Yann    fail
Yann    success

凯文和迈克被排除在外

【讨论】:

以上是关于查询以仅提取失败的记录的主要内容,如果未能解决你的问题,请参考以下文章

访问删除查询:只保留最近的3500条记录

创建来自两个不同系统的两个相同表的视图以仅返回唯一记录

Pyspark:加入 2 个数据帧以仅从第 2 个数据帧获取新记录(历史化)

如何配置 WildFly 8.2.0 日志记录以仅在调试级别显示应用程序

MySQL中提取重复记录的查询是啥[重复]

MS Access 2010 查询多次提取相同的记录,sql 挑战