查询以仅提取失败的记录
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'
状态的name
s 列表,那么您可以使用聚合和带有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
凯文和迈克被排除在外
【讨论】:
以上是关于查询以仅提取失败的记录的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark:加入 2 个数据帧以仅从第 2 个数据帧获取新记录(历史化)