在此数据中 - 有多个DATA_ID值与时间序列数据相关联。我试图从任何DATA_ID值中排除所有数据,为任何时间戳值返回USE的NULL值。
换句话说,我只想返回DATA_ID值(及其数据),如果它们具有所有时间戳值的完整(非任何NULL)值。
SELECT
My.Table.DATA_ID,
MY.Table.timestamp,
My.Table.USE
FROM
My.TABLE
WHERE timestamp BETWEEN '2012-06-01 00:00:00' AND '2012-06-02 23:59:59'
-- Something here that says exclude all data from DATA_ID(s)
-- with any missing USE data, i.e. USE=NULL
ORDER BY DATA_ID, timestamp
答案 0 :(得分:1)
假设我正确理解了您的问题,并且您想要排除包含空值的整批样本(由相等的data_id和timestamp确定)。
SELECT
My.Table.DATA_ID,
MY.Table.timestamp,
My.Table.USE
FROM
My.TABLE o
WHERE timestamp BETWEEN '2012-06-01 00:00:00' AND '2012-06-02 23:59:59'
and not exists (select 1 from my_table i
where i.use is null
and i.data_id = o.data_id
and i.timestamp BETWEEN '2012-06-01 00:00:00' AND '2012-06-02 23:59:59')
ORDER BY DATA_ID, timestamp
答案 1 :(得分:0)
简单的事情是这样的:
CREATE FUNCTION missing_info(MY.TABLE)
RETURNS BOOL
LANGUAGE SQL AS
$$ select $1.use is null -- chain conditions together with or.
-- no from clause needed. no where clause needed.
$$;
然后你可以添加:
其中(My.Table).missing_info不是真的;
因为您需要更改缺少哪种信息的逻辑,您可以在功能中更改它,一切仍然有效。
这是对派生信息的封装,其中ORDBMS就像PostgreSQL一样。
编辑:重新阅读您的示例,看起来您正在寻找的是IS NULL运算符。但是,如果您需要重新使用某种逻辑,请参阅上面的示例。 NULL永远不会“等于”NULL(因为我们不能说两个未知值是否相同)。但IS NULL会告诉您它是否为NULL。