1

このデータには、時系列データに関連付けられた複数の DATA_ID 値があります。タイムスタンプ値の USE に対して NULL 値を返す DATA_ID 値からすべてのデータを除外しようとしています。

つまり、すべてのタイムスタンプ値に対して完全な (NULL ではない) 値がある場合にのみ、DATA_ID 値 (およびそのデータ) を返したいと考えています。

以下にサンプルクエリを示します。

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

4

2 に答える 2

1

あなたの質問を正しく理解し、null 値を含むサンプルのバッチ全体 (等しい data_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
于 2012-08-25T12:25:13.810 に答える
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はtrueではありません。

また、欠落している情報の種類に関するロジックを変更する必要があるため、関数で変更するだけで、すべてが引き続き機能します。

これは、PostgreSQLのようなORDBMSが本当に優れている派生情報の一種のカプセル化です。

編集:例を読み直すと、探しているのはISNULL演算子のようです。ただし、ある種のロジックを再利用する必要がある場合は、上記の例を参照してください。NULLがNULLと「等しくなる」ことはありません(2つの未知の値が同じであるかどうかを判断できないため)。ただし、IS NULLは、それがNULLであるかどうかを示します。

于 2012-08-25T10:11:34.290 に答える