Postgres过滤数据的时间间隔

时间:2018-03-09 13:20:26

标签: sql postgresql

我在Postgres有一张桌子

 | ID | TIME                |
 |  1 | 2018-01-01 01:01:00 |
 |  2 | 2018-01-01 01:02:00 |
 |  3 | 2018-01-01 01:03:00 |
 |  . | ........            |
 | 61 | 2018-01-01 02:01:00 |
 | 62 | 2018-01-01 02:02:00 |

我需要查询所有ID TIME01:01:00开始,02:02:00结束1 hour timestep。因此,它会产生161

简单地说,每个result = previous result + 1 hour step

想法?

修改

不建议截断或与给定日期进行比较。查询应该是通用的,不仅可以使用小时作为步骤,还可以使用分钟。

2 个答案:

答案 0 :(得分:-1)

要过滤所需的行,请使用包含所需时间戳的表格进行连接。您可以使用表函数generate_series获得这样的表:

SELECT times FROM generate_series(TIMESTAMP '2018-01-01 01:01:00',
                                  TIMESTAMP '2018-01-01 02:01:00',
                                  '1 hour') times;
        times        
---------------------
 2018-01-01 01:01:00
 2018-01-01 02:01:00
(2 rows)

答案 1 :(得分:-1)

您可以检查如果同一小时内的任何记录没有较小的分钟,您可以选择它。

选择小时的第一个记录的查询:

select * from date_table dhour 
where 
not exists 
(select 1 from date_table dothers 
where 
date_part('hour', dothers.timestamp) = date_part('hour', dhour.timestamp)   
and  dothers.timestamp < dhour.timestamp 
)