2013-10-17 19 views
0

如下表,其存儲的變量的值發生變化本輸出的表:的PostgreSQL - 查詢其存儲的值的變化和以週期性的格式

Timestamp Value 
13:14  12 
14:25  33 
15:13  24 
15:41  48 
16:31  54 
17:00  63 
19:30  82 
22:30  13 

我需要構建輸出以下的查詢:

Timestamp Value 
14:00  12 
15:00  33 
16:00  48 
17:00  63 
18:00  63 
19:00  63 
20:00  82 
21:00  82 
22:00  82 
23:00  13 
And so on... 

什麼是實現所需輸出的正確方法?

在此先感謝。

回答

0

使用date_trunc()和日期/時間操作

綜述例如

user=# select datetime from tbl_test limit 1; 
     datetime 
------------------------ 
2013-07-26 15:36:00+09 
(1 row) 

user=# select date_trunc('hour', datetime) + interval '1 hour' 
     from tbl_test limit 1 
     ?column? 
------------------------ 
2013-07-26 16:00:00+09 
(1 row) 

格式化示例

user=# select to_char(date_trunc('hour', datetime) + interval '1 hour', 'HH24:MI') 
       from tbl_test limit 1; 
to_char 
--------- 
16:00 
(1 row) 

更新: 您可以使用窗口函數選擇最新的一個。

SELECT DISTINCT x.timestamp, last_value(x.value) OVER (PARTITION BY x.timestamp) 
FROM (SELECT TO_CHAR(date_trunc('hour', timestamp) + INTERVAL '1 hour', 'HH24:MI') AS timestamp, value 
     FROM tbl_test) as x 
ORDER BY x.timestamp; 

PostgreSQL的參考:

  1. 9.9. Date/Time Functions and Operators
  2. 9.8. Data Type Formatting Functions
+0

謝謝您的回答EveryEvery。這可以幫助我一點,但是這隻會截斷分鐘並在結果中添加一小時,仍然不是所需的輸出:我需要添加缺席小時(如20:00,21:00,22:00等)和如果在同一小時期間有兩個或更多值,我需要選擇最新的。請參閱http://sqlfiddle.com/#!1/bd985/5。 – Fracu

+0

@Francisco我誤解了你的問題。我添加了一些代碼來從重複中選擇最新的一個。但是,它不能增加缺席小時的價值。 http://sqlfiddle.com/#!1/bd985/22/0 – Curry

+0

@Francisco當你得到一個很好的解決方案,請發佈你的答案。我想知道很好的解決方案。 :-)通常,我已經用python等其他腳本語言解決了這些問題。 – Curry