自定义时间间隔按天分组

问题描述

我对 sql 和时间序列数据库非常陌生。我正在使用 crate 数据库。我想按天汇总数据。 但我想开始每天的开始时间是上午 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)

从上表。我想要 1616493600 和 1616493601 数据的总和(11 是结果)。因为 1616457600 和 1616461200 是小于上午 9 点的数据。

解决方法

您想将 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;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...