Postgres:每小时进行元组计数计算,/ w缺少值

时间:2019-07-07 16:51:30

标签: postgresql time-series sliding-window

我有一个表“ district_sensor_data”:

+----------------------------+--------------+-------+
|         timestamp          | district_id  | value |
+----------------------------+--------------+-------+
| 2020-04-06 00:04:20.000000 |      4       |  14   |
| 2020-04-06 00:09:40.000000 |      8       |  15   |
| 2020-04-06 00:06:25.000000 |     11       |  15   |
| 2020-04-06 00:06:45.000000 |     11       |  16   |
| 2020-04-06 00:00:30.000000 |      1       |  36.4 |
| 2020-04-06 00:00:35.000000 |      1       |  39.4 |
+----------------------------+--------------+-------+
  • 采样率为5秒,并且有多个具有相同时间戳的元组
  • 但是,也缺少时间戳。
  • 数据到达了多天。

这是怎么回事?

  • 我正在构建一个应用程序以可视化我的数据
  • 有一个时间轴组件,可让您选择要显示的1天数据窗口。
  • 此时间窗口是通过滚动选择的,因此有很多可能性“从所有可能的24小时窗口中选择”。
  • 我想在当前的24小时窗口中对每个district_id的值数量进行颜色编码。因此,我需要刻度的最小和最大数量。

这是滑动窗口起作用的地方。

  • 从理论上讲,我想获取每个可能的24小时窗口(按district_id分组)的值计数。
  • 由于这可能需要很长时间,因此我在考虑不要对每个元组都这样做。因此,首先,我可以分组为1小时的垃圾箱(也根据district_id),然后应用滑动窗口。但是我可以很高兴地跳过这种简化。

我已经研究过Postgres窗口函数,但是我什至无法达到我想要的目标。

我的主要问题是非连续时间序列,这使得无法使用行数指定窗口大小。有没有一种方法可以将窗口暂时定义为24小时窗口?

然后,我不知道如何使用generate_series()合并“地面真相”时间序列,以允许每5秒进行一次计算。

几乎唯一可以成功执行但没有为我的目标完成的事情:

SELECT extract(HOURS FROM dsd.timestamp) as hour,
       sensor_id,
       value,
       count(value) OVER (

           PARTITION BY district_id, sensor_id
           ORDER BY timestamp
           )

FROM district_sensor_data dsd;

edit:我更改了帖子以进行一些说明,并删除了sensor_id,因为它实际上与此处无关。抱歉造成混乱。

0 个答案:

没有答案