从表中排除前导NULL值

时间:2014-03-13 13:14:14

标签: sql sql-server-2008 tsql

为了给出一些上下文,我正在使用时间序列数据(一列),我想研究数据中的空白,由数据集中的NULL值表示。虽然我期望一些我不感兴趣的前导NULL值包含在我的最终数据集中。但是,前导NULL值的数量会因数据集而异。

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

非常感谢任何帮助。

谢谢!

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

2 个答案:

答案 0 :(得分: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,这就是我在升级时推荐的内容。

答案 1 :(得分: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