为了给出一些上下文,我正在使用时间序列数据(一列),我想研究数据中的空白,由数据集中的NULL值表示。虽然我期望一些我不感兴趣的前导NULL值包含在我的最终数据集中。但是,前导NULL值的数量会因数据集而异。
我想排除我的数据集的前x行,其中特定列的值为NULL,而不排除在同一列中显示较低的NULL值。
非常感谢任何帮助。
谢谢!
编辑:我也知道我在值栏中的第一条记录总是1,如果有帮助的话。
答案 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