Sql 从具有特定条件的组列表中查询项目

Sql 从具有特定条件的组列表中查询项目,sql,sql-server,Sql,Sql Server,我正在尝试从列表中选择某些记录 下面是一些示例数据 declare @datas table(BodyNumber int, Id int, RegNumber bigint, DeletedRegNumber bigint null) insert into @datas values(70, 355, 559, 559) insert into @datas values(70, 581, 660, NULL) insert into @datas value

我正在尝试从列表中选择某些记录

下面是一些示例数据

declare @datas table(BodyNumber int, Id int, RegNumber bigint, DeletedRegNumber bigint null)
insert into @datas values(70,   355,    559,    559)
insert into @datas values(70,   581,    660,    NULL)
insert into @datas values(53,   424,    354,    354)
insert into @datas values(53,   429,    364,    364)
insert into @datas values(60,   395,    519,    NULL)
insert into @datas values(60,   428,    296,    296)
insert into @datas values(65,   398,    518,    NULL)
insert into @datas values(65,   430,    256,    256)
BodyNumber
可以有多个
RegNumber
。我正在查找
Id
,它不是组中最高的
Id
,并且组在
DeletedRegNumber
列中有一个空值

例如,第一对(70)被排除,因为NULL位于“顶部”。第二组(53)也被排除在外,因为组中没有空值。第三组和第四组很重要,因为空值后面跟一个非空值


因此,查询需要返回Id为
395和398的行。

您可以使用
ROW\u NUMBER()
找出Id最低的行。在
中使用
只查找具有空值的正文编号

;WITH cte AS (
SELECT *, 
  ROW_NUMBER() OVER (PARTITION BY BodyNumber ORDER BY ID ASC) AS rn
FROM @datas)


SELECT *
FROM cte WHERE rn = 1 AND DeletedRegNumber IS NULL
AND bodynumber IN (SELECT bodynumber FROM @datas WHERE DeletedRegNumber IS NULL)

select d.*
from @datas d
where d.DeletedRegNumber is null and
      exists (select 1
              from @datas d2
              where d2.BodyNumber = d.BodyNumber and d2.id > d.id
             );