用于获取起始和结束null之间的数据的SQL查询
我在某个项目中得到了一个需求,我需要从一个表中选择数据,在这个表中,我需要选择从空值开始的顶部值,然后再选择一些空值和其他数据 假设表名是数据,其中有一列名为Company 公司 无效的 无效的 无效的 谷歌 微软 神谕 无效的 无效的 联系在一起 啁啾 脸谱网 无效的 无效的 简单地说,我需要编写一个查询,选择{Google,Microsoft和Oracle}作为结果,而不选择其他内容。。。。这只是一个样本数据,不是我的实际项目 此数据在起始null和结束null之间可以有数百个值 请提供您的输入以编写此类查询用于获取起始和结束null之间的数据的SQL查询,sql,Sql,我在某个项目中得到了一个需求,我需要从一个表中选择数据,在这个表中,我需要选择从空值开始的顶部值,然后再选择一些空值和其他数据 假设表名是数据,其中有一列名为Company 公司 无效的 无效的 无效的 谷歌 微软 神谕 无效的 无效的 联系在一起 啁啾 脸谱网 无效的 无效的 简单地说,我需要编写一个查询,选择{Google,Microsoft和Oracle}作为结果,而不选择其他内容。。。。这只是一个样本数据,不是我的实际项目 此数据在起始null和结束null之间可以有数百个值 请提供您的
谢谢假设ID是用来维持秩序的。。。你可以这样做。这只需找到第一个非空ID,然后找到下一个空ID-1作为其范围
SELECT *
FROM COMPANY
WHERE ID BETWEEN
( SELECT MIN(ID)
FROM COMPANY
WHERE COMPANY_NAME IS NOT NULL ) AND
( SELECT MIN(ID) - 1
FROM COMPANY
WHERE COMPANY_NAME IS NULL
AND ID > ( SELECT MIN(ID) MIN_ID
FROM COMPANY
WHERE COMPANY_NAME IS NOT NULL ) )
或者您可以使用分析函数,如果您的DBMS中有分析函数,这可能会更好 最简单的方法是使用滞后:
如果没有延迟,我将使用相关子查询:
select d.*
from (select d.*,
(select d2.company
from data d2
where d2.id < d.id
order by d2.id desc
limit 1
) as prev_company
from data d
) d
where prev_company is null and company is not null;
请注意,在某些数据库中,限制可能是仅获取第一行或选择top 1或其他构造。SQL表本身就是无序的,因此没有下一行的概念,除非您有一列指定顺序,例如自动递增的id或时间戳。假设我有一个自动递增的id和公司列非常感谢您的即时回复。。。这真的很有帮助。。。你能给我举一个解析函数的例子吗。。。事实上这就是我真正想要的。。。再次感谢!您正在使用哪个数据库?
select d.*
from (select d.*,
(select d2.company
from data d2
where d2.id < d.id
order by d2.id desc
limit 1
) as prev_company
from data d
) d
where prev_company is null and company is not null;