SQL Query在开始和结束null之间获取数据

时间:2014-05-27 13:12:48

标签: sql

我在某个项目中有一个要求,我需要一个表中的数据,我需要选择在空值之后开始的顶部值,而不是一些空值和更多数据

假设表名是Data,其中有一列名为Company

公司

  • NULL
  • NULL
  • NULL
  • 谷歌
  • 微软
  • 甲骨文
  • NULL
  • NULL
  • 已链接
  • 微博
  • NULL
  • NULL

简单来说,我需要编写一个查询,选择{Google,Microsoft和Oracle}作为结果,而不是别的....它只是一个示例数据而不是我的实际项目 此数据在起始null和结束null之间可以有数百个值

请提供您的输入以撰写此类查询 感谢

2 个答案:

答案 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 ) ) 

SQL Fiddle Example

或者你可以使用分析函数,这可能会更好,假设你在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 onlyselect top 1或其他一些构造。