PostgreSQL - 查询存储值更改并以周期性格式显示输出的表

时间:2013-10-17 01:48:50

标签: sql 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...

实现所需输出的正确方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分: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