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
);