【问题标题】:SQL partition the dataset and pick until a column value changes to a particular value in each datasetSQL 对数据集进行分区并选择,直到列值更改为每个数据集中的特定值
【发布时间】:2020-09-27 18:42:16
【问题描述】:

我有一组如下的行

选择 [Id] , 实体 , 时间 , 代码 , ROW_NUMBER() OVER (PARTITION BY Entity ORDER BY Time DESC) RowNumber 来自实体示例 ORDER BY Entity, RowNumber DESC

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

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

这是要实现的结果快照

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

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    您可以使用相关子查询:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2015-07-04
      • 2021-07-24
      • 2011-03-31
      相关资源
      最近更新 更多