SQL 对数据集进行分区并选择,直到列值更改为每个数据集中的特定值

SQL partition the dataset and pick until a column value changes to a particular value in each dataset

我有一组行如下

select [Id] , 实体 , 时间 , 代码 , ROW_NUMBER() OVER (PARTITION BY Entity ORDER BY Time DESC) RowNumber 来自实体示例 按实体排序,行号 DESC

现在,目标是检索每个实体类型中的行,直到代码列值更改为 "Denied"。 条件是在每个实体类型中按时间列降序排序并选择最上面的行,直到代码列值更改为 "Denied"

我们如何在 SQL 中实现这一目标?

这是要实现的结果快照

注意:由于隐私问题,我创建了一个示例数据集并上传了它。所以实体的数量和与每个实体相关的行数是变化的

您可以使用相关子查询:

select ee.*
from EntityExample ee
where ee.time < (select min(ee2.time)
                 from EntityExample ee2
                 where ee2.entity = ee.entity and
                       ee2.code = 'Denied'
                );