在pg数据库中从开始时间每间隔两个小时取一次表里符合时间范围的数据直到结束时间为止并输出分隔的时间间隔两端时间的sql语句
时间: 2024-10-16 07:13:56 浏览: 24
在 PostgreSQL 数据库中,你可以使用 `INTERVAL` 和窗口函数 `ROW_NUMBER()` 来实现这个需求。假设你的表名为 `your_table`,有 `start_time` 和 `end_time` 字段存储时间范围,可以尝试以下 SQL 语句:
```sql
WITH time_series AS (
SELECT
start_time,
end_time,
ROW_NUMBER() OVER (ORDER BY start_time) as row_num,
EXTRACT(EPOCH FROM (end_time - start_time)) / 60 / 60 AS interval_hours -- 计算两小时间隔
FROM your_table
)
SELECT
start_time,
LAG(start_time, lead_row_num - 1, end_time) OVER (PARTITION BY interval_hours ORDER BY start_time) AS start_of_next_interval,
start_time
FROM (
SELECT
start_time,
end_time,
row_num,
interval_hours,
LEAD(row_num, interval_hours * 2, NULL) OVER (ORDER BY start_time) AS lead_row_num -- 获取下一个两小时时间点
FROM time_series
) subquery
WHERE row_num % interval_hours = 0 -- 取出每隔两小时的行
AND (lead_row_num IS NOT NULL OR start_time = end_time) -- 如果不是最后一个两小时,或者已经到达结束时间
ORDER BY start_time;
```
请注意替换 `your_table`、`start_time` 和 `end_time` 为实际的表名和字段名。这个查询首先创建了一个按时间顺序排列的时间序列,然后选择符合条件的时间点,并获取前后时间间隔。
阅读全文