我在某个项目中有一个要求,我需要一个表中的数据,我需要选择在空值之后开始的顶部值,而不是一些空值和更多数据
假设表名是Data,其中有一列名为Company
简单来说,我需要编写一个查询,选择{Google,Microsoft和Oracle}作为结果,而不是别的....它只是一个示例数据而不是我的实际项目 此数据在起始null和结束null之间可以有数百个值
请提供您的输入以撰写此类查询 感谢
答案 0 :(得分:0)
假设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中有它们。
答案 1 :(得分:0)
最简单的方法是使用lag()
:
select d.*
from (select d.*, lag(company) over (order by id) as prev_company
from data d
) d
where prev_company is null and company is not null;
如果你没有lag()
,我会使用相关的子查询:
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;
请注意,在某些数据库limit
可能是fetch first row only
或select top 1
或其他一些构造。