sql - 将具有一个时间戳和对应的 x 整数数组的一行显示为具有 x 个时间戳和一个对应整数的 x 行

标签 sql postgresql

抱歉问题措辞不佳,我不知道如何简洁地描述我的问题。我正在处理来自传感器的数据,该传感器每 10 分钟扫描一次房间,以查看房间内有多少人。数据看起来像这样

reading_id |      timestamp      |    values      |          
--------------------------------------------------
1          | 2019-02-28 01:00:00 | {1,1,6,17,4,4} |
2          | 2019-02-28 02:00:00 | {3,4,6,3,0,8}  |
3          | 2019-02-28 03:00:00 | {0,0,0,0,0,0}  |

有什么办法可以让它看起来像这样吗?

reading_id |      timestamp      |    values      |
-------------------------------------------------- 
1          | 2019-02-28 01:00:00 | 1              |
1          | 2019-02-28 01:10:00 | 1              |
1          | 2019-02-28 01:20:00 | 6              |
1          | 2019-02-28 01:30:00 | 17             |
1          | 2019-02-28 01:40:00 | 4              |
1          | 2019-02-28 01:50:00 | 4              |
2          | 2019-02-28 02:00:00 | 3              |
...

我不确定 reading_id 会发生什么,但无论如何我都不需要它。

最佳答案

您可以使用 unnest with ordinality 来获取每个数组元素的索引,并使用它来添加 10 分钟的间隔。

select t.reading_id,
       t."timestamp" + interval '10 minutes' * (u.idx - 1) AS timestamp,
       u.value
from the_table t
   cross join unnest(t."values") with ordinality AS u(value, idx)
order by 1,2;

在线示例:https://rextester.com/TEB87353

关于sql - 将具有一个时间戳和对应的 x 整数数组的一行显示为具有 x 个时间戳和一个对应整数的 x 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096813/

相关文章:

SQL Server 查询返回太多记录

sql - PostgreSQL:如何在使用 case 语句时避免被零除

sql - 这是为此报告编写 SQL 的最佳方式吗?

mysql - 如何通过多个关系过滤 SQL 查询?

postgresql - 从 npgsql 中的流读取时出现异常

sql - 什么时候应该使用外键?

MySQL - 选择另一列的最小值后选择一列的最小值,并在特定范围内

database - PostgreSQL - 使用分区备份和恢复数据库表

ruby-on-rails - Rails Arel 队列分析

Django:我在 syncdb 后收到 [关系 "auth_group"不存在] 错误