2017-06-20 76 views
1

我需要PostgresSQL的幫助。我試圖將一些記錄(5,10,15,20等)分成60分鐘的時間間隔。Postgres - 總分鐘到小時

我需要的是GROUP BY和AVG在給定小時內的分鐘值到相應的小時。

SELECT id, value, 
extract(year from GDDP.timestamp) as YEAR, 
extract(month from GDDP.timestamp) as MONTH, 
extract(day from GDDP.timestamp) as DAY, 
extract(hour from GDDP.timestamp) as "HOUR", 
extract(minute from GDDP.timestamp) as MINUTE, 

FROM GDDP 

WHERE value > 0 AND 
GDDP.timestamp BETWEEN '2016-07-01 00:00:00' and '2016-12-31 23:55:00' 

ORDER BY YEAR, MONTH, DAY, HOUR 

目前,這是上面的查詢結果:

id | value | YEAR | MONTH | DAY | HOUR | MINUTE 
------------------------------------------------- 
1 | 100 | 2016 | 07 | 01 | 1 | 05 
2 | 200 | 2016 | 07 | 01 | 1 | 10 
3 | 100 | 2016 | 07 | 01 | 1 | 15 
4 | 300 | 2016 | 07 | 01 | 1 | 20 
5 | 200 | 2016 | 07 | 01 | 1 | 25 
6 | 500 | 2016 | 07 | 01 | 1 | 30 

但是,我想結果是這樣的:

id | value | YEAR | MONTH | DAY | HOUR 
--------------------------------------- 
1 | 233.3 | 2016 | 07 | 01 | 1 

預先感謝任何幫助!

+0

使用成羣的聚集功能avg()你能解釋一下你的算法比較好? 「GROUP BY和AVG在給定小時內的分鐘值」暗示123的平均值是15和20,輸出的結果是1。平均值爲342和342,產量爲2; 567平均爲15和30,產量爲3。這沒有意義,所以它一定是錯的。你是什​​麼意思來獲得1,2和3的輸出時間? –

+0

@rd_nielsen我已經編輯了表格,以便更真實。從本質上講,我需要平均每行的**值**,以相同的MONTH,DAY,HOUR作爲彙總到相應的小時。 – emmanueledu

回答

0

通過year, month, day, hour

SELECT 
    min(id) as id, 
    avg(value) as value, 
    extract(year from gddp.timestamp) as year, 
    extract(month from gddp.timestamp) as month, 
    extract(day from gddp.timestamp) as day, 
    extract(hour from gddp.timestamp) as hour 
FROM gddp 
WHERE value > 0 
AND gddp.timestamp BETWEEN '2016-07-01 01:00:00' AND '2016-12-31 01:23:00' 
GROUP BY year, month, day, hour 
ORDER BY year, month, day, hour; 

id |  value   | year | month | day | hour 
----+----------------------+------+-------+-----+------ 
    1 | 233.3333333333333333 | 2016 |  7 | 1 | 1 
(1 row)