我有这个查询来提取我可用于某些分析的数据:
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
当我将它与上面的(原样)一起使用时,它为我提供了良好的数据,并且当我添加使用>的额外约束时,随时抛出任何具有空值的数据集(及其所有数据)。 0,它停止抛出dataid将为null值。
数据由dataids(唯一设备的值),时间戳和USE(当时该设备的功耗)组成 - 我正在尝试获取设备的季节性配置文件,但丢弃整个设备给定空或错误(负)数据。
我希望它删除任何使用值为null或< = 0的所有dataids(及其所有数据)。想法?
答案 0 :(得分:0)
有点难以理解你的问题。我想你想要消除所有dataid
个{NULL}为负的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
子句中的select
,因为没有必要(您有group by
)。我还给表提供了一个更易读的别名ea
,而不是表名。