如何在postgres sql中获取最小值

时间:2016-09-05 17:25:41

标签: sql postgresql

我的记录很少,我想创建一个查询来提供每个潜水电池级别的每小时记录

我从时间戳字段做了什么我提取日期并选择min函数以获得低值但是从时间戳开始的提取小时不是aggragate函数所以我需要添加组,现在给我重复记录。 这是我的sql:

select extract(hour from observationtime) as hour,
       deviceid,
       min(batterylevel) as batterylevel 
from smartvakt_device_report 
where batterylevel!='' 
  and deviceid!='' 
  and observationtime between '2016-02-02' and '2016-03-02' 
group by observationtime,deviceid  
order by observationtime ASC, deviceid ASC

以上是查询输出: enter image description here

以下是实际记录: enter image description here

有人可以建议我如何删除这些重复的

2 个答案:

答案 0 :(得分:0)

由于您只对小时感兴趣,因此在进行分组时,您必须表明这样

group by extract(hour from observationtime)

否则,postgresql会尝试将observationtime值相同的行组合在一起。但是observationtime包含完整分辨率的时间,而不仅仅是小时。

答案 1 :(得分:0)

按列顺序更改分组,按deviceid分组,然后hour使用相同的功能extract(hour from observationtime)

    SELECT
    deviceid, 
    extract(hour from observationtime) AS hour,
    min(batterylevel) AS batterylevel 
    FROM smartvakt_device_report
    WHERE
    batterylevel!='' 
    AND deviceid!='' 
    AND observationtime BETWEEN '2016-02-02' 
    AND '2016-03-02' 
    GROUP BY
    deviceid,
    extract(hour from observationtime)
    ORDER BY 
    extract(hour from observationtime) ASC, 
    deviceid ASC