0

いくつかの分析に使用できるデータをプルするこのクエリがあります。


SELECT   distinct egauge_analyze_2.dataid,     
date_trunc('hour', egauge_analyze_2.timestamp_localtime)::time AS HOUR, 
avg(egauge_analyze_2.use) AS USE   

FROM   dev.egauge_analyze_2

WHERE egauge_analyze_2.timestamp_localtime BETWEEN
       '2012-07-16 00:00:00' AND '2012-08-17 23:59:59' 

AND egauge_analyze_2.use IS NOT NULL

-- AND use > 0

GROUP BY 1,2 
ORDER BY 1,2

上記で(そのままで)使用すると、適切なデータが得られ、null値を持つすべてのデータID(およびそのすべてのデータ)がいつでも破棄されます。使用の制約> 0を追加すると、データIDの破棄が停止します。値をnullにします。

データは、dataids(一意のデバイスの値)、タイムスタンプ、およびUSE(その時点でのそのデバイスの消費電力)で構成されています-デバイスの季節プロファイルを取得しようとしていますが、nullを指定したデバイス全体を破棄しますまたは誤った(負の)データ。

nullまたは<=0の使用価値については、すべてのdataid(およびそのすべてのデータ)を破棄したいと思います。アイデアはありますか?

4

1 に答える 1

0

あなたの質問を理解するのは少し難しいです。NULLまたは負の値をdataid持つすべてのを削除したいと思います。これは、次の句useを使用して行うことができます。having

SELECT ea.dataid,     
       date_trunc('hour', ea.timestamp_localtime)::time AS HOUR, 
       avg(ea.use) AS USE   
FROM dev.egauge_analyze_2 ea
WHERE ea.timestamp_localtime BETWEEN '2012-07-16 00:00:00' AND '2012-08-17 23:59:59'
GROUP BY 1,2
having sum(case when use is null or use < 0 then 1 else 0 end) > 0
ORDER BY 1,2

また、不要な(があります)のでdistinct、句の中のを削除しました。また、テーブル名の代わりに、テーブルに読みやすいエイリアスを付けました。selectgroup byea

于 2012-12-03T21:53:21.883 に答える