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

当我将它与上述(按原样)一起使用时,它会为我提供良好的数据并随时抛出任何具有空值的 dataids(及其所有数据),当我添加额外的 use > 0 约束时,它会停止抛出 dataids将为空值。

数据由 dataids(唯一设备的值)、时间戳和 USE(当时该设备的功耗)组成 - 我正在尝试获取设备的季节性配置文件,但丢弃给出 null 的整个设备或错误(负)数据。

我希望它为 null 或 <= 0 的任何使用值丢弃所有 dataids(及其所有数据)。想法?

4

1 回答 1

0

很难理解你的问题。我认为您想消除所有具有NULL 或负值dataid的 s 。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而不是表名。

于 2012-12-03T21:53:21.883 回答