postgresql:基于其他不完整数据排除数据

postgresql:基于其他不完整数据排除数据,postgresql,filter,null,Postgresql,Filter,Null,在此数据中-有多个数据ID值与时间序列数据关联。我试图从任何返回空值以用于任何时间戳值的数据ID值中排除所有数据 换句话说,我只想在所有时间戳值都具有完整(而不是任何空)值的情况下返回DATA_ID值(及其数据) 下面给出了查询示例: 简单的做法如下: CREATE FUNCTION missing_info(MY.TABLE) RETURNS BOOL LANGUAGE SQL AS $$ select $1.use is null -- chain conditions together

在此数据中-有多个数据ID值与时间序列数据关联。我试图从任何返回空值以用于任何时间戳值的数据ID值中排除所有数据

换句话说,我只想在所有时间戳值都具有完整(而不是任何空)值的情况下返回DATA_ID值(及其数据)

下面给出了查询示例:

简单的做法如下:

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.
$$;
然后您可以添加:

where(My.Table)。缺少的_信息不正确

当你需要改变逻辑,比如缺少什么样的信息时,你只需在函数中改变它,所有的东西都能正常工作

这是一种派生信息的封装,而ORDBMS就像PostgreSQL一样非常出色


编辑:重新阅读您的示例,看起来您要查找的是is NULL运算符。但是,如果需要重新使用某种逻辑,请参见上面的示例。NULL从不“等于”NULL(因为我们不能说两个未知值是否相同)。但是IS NULL告诉您它是否为NULL。

简单的做法如下:

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.
$$;
然后您可以添加:

where(My.Table)。缺少的_信息不正确

当你需要改变逻辑,比如缺少什么样的信息时,你只需在函数中改变它,所有的东西都能正常工作

这是一种派生信息的封装,而ORDBMS就像PostgreSQL一样非常出色


编辑:重新阅读您的示例,看起来您要查找的是is NULL运算符。但是,如果需要重新使用某种逻辑,请参见上面的示例。NULL从不“等于”NULL(因为我们不能说两个未知值是否相同)。但是IS NULL告诉您它是否为NULL。

假设我正确理解您的问题,并且您希望排除包含NULL值的整批样本(由相等的数据id和时间戳确定)

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

假设我正确理解您的问题,并且您希望排除包含空值的整批样本(由相等的数据_id和时间戳确定)

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

您真的应该包括您的模式和一些示例数据,这样人们就不会对数据进行猜测。我猜
DATA\u ID
是某种数字,
timestamp
是时间戳值,
USE
是。。。什么?是这样吗?或者
DATA\u ID
实际上是数组还是什么?而且,您的列名选择非常糟糕;一个是SQL关键字
USE
,一个是SQL数据类型名称
timestamp
。请展示真实的表格。如果你编辑你的问题,添加一些样本数据和一个预期结果的例子,这将非常有帮助。你的问题也与其自身相矛盾。在文本中,如果所有时间戳都具有非空值,则表示要跳过
数据\u id
值。然后在本例中,您说要从缺少
USE
值的数据ID中排除所有数据。这些看起来是不同的东西。你真的应该包括你的模式和一些样本数据,这样人们就不会对数据猜测了。我猜
DATA\u ID
是某种数字,
timestamp
是时间戳值,
USE
是。。。什么?是这样吗?或者
DATA\u ID
实际上是数组还是什么?而且,您的列名选择非常糟糕;一个是SQL关键字
USE
,一个是SQL数据类型名称
timestamp
。请展示真实的表格。如果你编辑你的问题,添加一些样本数据和一个预期结果的例子,这将非常有帮助。你的问题也与其自身相矛盾。在文本中,如果所有时间戳都具有非空值,则表示要跳过
数据\u id
值。然后在本例中,您说要从缺少
USE
值的数据ID中排除所有数据。这些似乎是不同的事情。