在开始时间和结束时间内从开始时间依次取两个小时的数据的pg数据库的sql语句怎么写
时间: 2024-10-15 11:22:43 浏览: 59
在PostgreSQL中,如果你有一个包含`start_time`和`end_time`字段的时间戳表,并且你想每两小时获取一次数据,可以使用`INTERVAL '2 hours'`和窗口函数`ROW_NUMBER()`来实现。假设表名为`data_table`,你可以尝试这样的SQL:
```sql
WITH data_intervals AS (
SELECT
start_time,
end_time,
ROW_NUMBER() OVER (ORDER BY start_time) - ROW_NUMBER() OVER (PARTITION BY EXTRACT(HOUR FROM start_time) MOD 2 ORDER BY start_time) AS rn
FROM data_table
)
SELECT *
FROM data_intervals
WHERE rn % 2 = 0
AND start_time BETWEEN '开始时间' AND '结束时间';
```
这里的关键点是:
- `ROW_NUMBER() OVER (ORDER BY start_time)`会为每个时间段内的记录分配一个行号,按照`start_time`排序。
- `PARTITION BY EXTRACT(HOUR FROM start_time) MOD 2`将一天分为两个部分,每部分间隔2小时,因为`MOD 2`会返回余数,0代表第一个2小时,1代表第三个、第五个等2小时。
- `rn - ROW_NUMBER() OVER ...`计算出每两小时内每个记录相对于起始时间点的偏移,偶数偏移的记录会被选择。
- 最后,筛选出`start_time`在指定范围内的记录。
记得替换 `'开始时间'` 和 `'结束时间'` 为实际的时间字符串,格式通常是 'YYYY-MM-DD HH:MI:SS'。
阅读全文