【发布时间】:2018-08-23 21:44:57
【问题描述】:
我在 BigQuery 中有一个具有以下架构的表:
deviceId int,
state int,
started timestamp,
duration minutes
此处的一行表示此设备在接下来的几分钟内从 start 开始处于此状态。这里的分钟数可能超过几天。
现在我想知道这个 deviceId 每天有多少分钟处于这种状态。所以上表中的一行可以表示为以下列表:
deviceId int,
state int,
date date,
duration minutes
这是我正在玩的一些示例表:
WITH `temp.test` AS (
SELECT 1 id, 1 state, TIMESTAMP('2018-08-17 10:40:00') ts, 120 minutes UNION ALL
SELECT 1, 2, '2018-08-17 12:40:00', 120 UNION ALL
SELECT 1, 1, '2018-08-17 14:40:00', 560 UNION ALL
SELECT 2, 1, '2018-08-17 09:00:00', 180 UNION ALL
SELECT 2, 2, '2018-08-17 12:00:00', 2940
)
在最后一行的情况下,其持续时间为 2940 分钟,即 49 小时(2 天零 1 小时),因此需要将其转换为多行。我想要从这个例子中得到的输出如下:
1, 1, 2018-08-17, 120
1, 2, 2018-08-17, 120
1, 1, 2018-08-17, 560
2, 1, 2018-08-17, 180
2, 2, 2018-08-17, 720
2, 2, 2018-08-17, 1440
2, 2, 2018-08-17, 780
有没有办法在 SQL 中实现这一点,还是我应该编写一个 UDF?
【问题讨论】:
-
当然。简单的 SQL 就可以做到。你能提供一些虚拟数据吗
-
好点。我更新了我的问题!谢谢。
标签: sql google-bigquery