2014-03-13 27 views
0

为了给出一些上下文,我使用了时间序列数据(一列),并且我想研究数据中由数据集中的NULL值表示的间隙。虽然我期望一些我不感兴趣的NULL值,包括在我的最终数据集中。但是,数据集之间的前导NULL值的数量会有所不同。从表中排除前导空值

我想排除特定列的值为NULL的数据集的前x行数量,而不排除在同一列中出现较低的NULL值。

任何帮助将不胜感激。

谢谢!

编辑:我也知道,值列中的第一条记录总是1,如果有帮助。

+0

你是如何定义“龙头”?您需要通过某些东西来订购 - 行固有地没有数据库中的订单。 – Bridge

+2

请显示您的查询,错误地排除空白内的NULL。纠正一个错误比猜测你的表结构要容易得多,然后提出修正。 – dasblinkenlight

+0

@Bridge我有第二列显示row_number,这是我如何排序记录。 – user3022742

回答

1

不幸的是,SQL Server 2008中,我想不出任何东西比清洁剂:

SELECT row_number,value FROM <table> t1 
WHERE value is not NULL OR 
    EXISTS (select * FROM <table> t2 
      where t2.value is not null and 
      t2.row_number < t1.row_number) 

正如顺便说一句,对于SQL Server 2012中,你可以使用MAX()用适当OVER()条款这样它会考虑以前的所有行。如果MAX()返回NULL那么所有前面的行已知是NULL,这就是我推荐如果/当您升级时。

+0

列中的所有空值感谢信息@Damien_The_Unbeliever – user3022742

0

设定为每一个数据,然后只查询后,一切你所能找到的第一个非空项目:

WITH FirstItem AS 
(
    SELECT 
     DataSetID, 
     MIN(row_number) row_number 
    FROM Data 
    WHERE value IS NOT NULL 
    GROUP BY DataSetID 
) 
SELECT d.* FROM Data d 
INNER JOIN FirstItem fi 
    ON d.DataSetID = fi.DataSetid 
    AND d.row_number >= fi.row_number 
+0

非常感谢@D斯坦利 - 这很好 – user3022742