按天分组自定义时间间隔

Group By day for custom time interval

我对 SQL 和时间序列数据库还很陌生。我正在使用板条箱数据库。我想按天汇总数据。 但是我想开始每天的开始时间是上午 9 点而不是上午 12 点。

时间间隔是上午 9 点到晚上 11.59。

Unix 时间戳用于存储数据。以下是我的示例数据库。

|sensorid | reading    | timestamp|
====================================
|1        | 1616457600 | 10       |
|1        | 1616461200 | 100      | 
|2        | 1616493600 | 1        |
|2        | 1616493601 | 10        |

目前我使用以下命令进行分组。但它给出的开始时间是凌晨 12 点。

select date_trunc('day', v.timestamp) as day,sum(reading)
from sensor1  v(timestamp)
group by  (DAY)

来自以上table。我想要 1616493600 和 1616493601 数据的总和(11 是结果)。因为1616457600和1616461200是早上9点不到的数据。

您想将午夜加九个小时:

date_trunc('day', v.timestamp) + interval '9' hour

编辑: 如果你想从你添加的数据中排除 9:00 之前的小时数,你必须添加一个 WHERE 子句:

where extract(hour from v.timestamp) >= 9

这是包含所有相关数据的完整查询:

select
  date_trunc('day', v.timestamp) as day,
  date_trunc('day', v.timestamp) + interval '9' hour as day_start,
  min(v.timestamp) as first_data,
  max(v.timestamp) as last_data,
  sum(reading) as total_reading
from sensor1  v(timestamp)
where extract(hour from v.timestamp) >= 9
group by day
order by day;