我在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
TIME
从01:01:00
开始,02:02:00
结束1 hour timestep
。因此,它会产生1
和61
简单地说,每个result
= previous result
+ 1 hour step
想法?
修改
不建议截断或与给定日期进行比较。查询应该是通用的,不仅可以使用小时作为步骤,还可以使用分钟。
答案 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
)