【问题标题】:How to get duration of active signal in bigquery?如何在 bigquery 中获取活动信号的持续时间?
【发布时间】:2020-06-29 10:04:20
【问题描述】:

我有一个包含各种信号和 utc 时间戳的 bigquery 表。我希望将“传感器”列的值大于 1 的营业时间作为查询结果。

我的想法是以某种方式获取 Sensor > 1 的时间戳的最小值和最大值,然后从 max(timestamp) 中减去 min(timestamp),并将其聚合为 Sensor > 1 的新列中的工作时间。

timestamp,Sensor
2020-05-13 08:46:29 UTC,0.76306754
2020-05-13 08:46:28 UTC,0.76306754
2020-05-13 08:46:27 UTC,0.76306754
2020-05-13 08:46:26 UTC,0.76306754
2020-05-13 08:46:25 UTC,0.76306754
2020-05-13 08:46:24 UTC,0.76306754
2020-05-13 08:46:23 UTC,0.76306754
2020-05-13 08:46:22 UTC,1.4879817
2020-05-13 08:46:21 UTC,1.4879817
2020-05-13 08:46:20 UTC,1.4879817
2020-05-13 08:45:58 UTC,0.6486074
2020-05-13 08:45:57 UTC,0.6486074
2020-05-13 08:45:56 UTC,0.6486074
2020-05-13 08:45:55 UTC,0.6486074
2020-05-13 08:45:54 UTC,0.6486074
2020-05-13 08:45:53 UTC,0.6486074
2020-05-13 08:45:52 UTC,0.6486074
2020-05-13 08:45:51 UTC,0.6486074
2020-05-13 08:45:50 UTC,0.6486074
2020-05-13 08:45:49 UTC,0.6486074
2020-05-13 08:45:48 UTC,0.6486074
2020-05-13 08:45:47 UTC,0.6486074
2020-05-13 08:45:46 UTC,0.6486074
2020-05-13 08:45:45 UTC,0.6486074
2020-05-13 08:45:44 UTC,0.6486074
2020-05-13 08:45:43 UTC,0.6486074
2020-05-13 08:45:42 UTC,0.6486074
2020-05-13 08:45:41 UTC,0.6486074
2020-05-13 08:45:40 UTC,0.6486074
2020-05-13 08:45:39 UTC,0.6486074
2020-05-13 08:45:38 UTC,1.2972147
2020-05-13 08:45:37 UTC,1.2972147
2020-05-13 08:45:36 UTC,1.2972147
2020-05-13 08:45:35 UTC,1.2972147
2020-05-13 08:45:34 UTC,1.2972147
2020-05-13 08:45:33 UTC,1.2972147
2020-05-13 08:45:15 UTC,0.76306754
2020-05-13 08:45:14 UTC,0.76306754
2020-05-13 08:45:13 UTC,0.76306754
2020-05-13 08:45:12 UTC,0.76306754
2020-05-13 08:45:11 UTC,0.76306754
2020-05-13 08:45:10 UTC,0.76306754
2020-05-13 08:45:09 UTC,0.76306754
2020-05-13 08:45:08 UTC,0.76306754
2020-05-13 08:45:07 UTC,0.76306754
2020-05-13 08:45:06 UTC,0.76306754
2020-05-13 08:45:05 UTC,0.76306754
2020-05-13 08:45:04 UTC,1.4879817
2020-05-13 08:45:03 UTC,1.4879817
2020-05-13 08:45:02 UTC,1.4879817
2020-05-13 08:45:01 UTC,1.4879817
2020-05-13 08:44:42 UTC,0.5723007
2020-05-13 08:44:41 UTC,0.5723007
2020-05-13 08:44:40 UTC,0.5723007
2020-05-13 08:44:39 UTC,0.5723007
2020-05-13 08:44:38 UTC,0.5723007
2020-05-13 08:44:37 UTC,0.5723007
2020-05-13 08:44:36 UTC,0.5723007
2020-05-13 08:44:35 UTC,0.5723007
2020-05-13 08:44:34 UTC,0.5723007
2020-05-13 08:44:33 UTC,0.5723007
2020-05-13 08:44:32 UTC,1.5642884
2020-05-13 08:44:31 UTC,1.5642884
2020-05-13 08:44:30 UTC,1.5642884
2020-05-13 08:44:19 UTC,0.5723007
2020-05-13 08:44:18 UTC,0.5723007
2020-05-13 08:44:17 UTC,0.5723007
2020-05-13 08:44:16 UTC,0.5723007
2020-05-13 08:44:15 UTC,0.5723007
2020-05-13 08:44:14 UTC,0.5723007
2020-05-13 08:44:13 UTC,0.5723007
2020-05-13 08:44:12 UTC,0.5723007
2020-05-13 08:44:11 UTC,0.5723007
2020-05-13 08:44:10 UTC,1.4879817
2020-05-13 08:44:09 UTC,1.4879817
2020-05-13 08:44:08 UTC,1.4879817
2020-05-13 08:43:53 UTC,0.5723007
2020-05-13 08:43:52 UTC,0.5723007
2020-05-13 08:43:51 UTC,0.5723007
2020-05-13 08:43:50 UTC,0.5723007
2020-05-13 08:43:49 UTC,0.5723007
2020-05-13 08:43:48 UTC,0.5723007
2020-05-13 08:43:47 UTC,0.5723007
2020-05-13 08:43:46 UTC,0.5723007
2020-05-13 08:43:45 UTC,0.5723007
2020-05-13 08:43:44 UTC,1.5642884
2020-05-13 08:43:43 UTC,1.5642884
2020-05-13 08:43:42 UTC,1.5642884
2020-05-13 08:43:25 UTC,1.4879817
2020-05-13 08:43:24 UTC,1.4879817
2020-05-13 08:43:08 UTC,1.2590615
2020-05-13 08:43:07 UTC,1.2590615
2020-05-13 08:43:06 UTC,1.2590615
2020-05-13 08:42:50 UTC,1.2590615
2020-05-13 08:42:49 UTC,1.2590615
2020-05-13 08:42:48 UTC,1.2590615
2020-05-13 08:42:47 UTC,1.2590615
2020-05-13 08:42:34 UTC,0.53414726
2020-05-13 08:42:33 UTC,0.53414726
2020-05-13 08:42:32 UTC,0.53414726

不幸的是,我没有找到任何信息如何获取传感器大于 1 的时间戳的最小(时间)和最大(时间)并将时间戳加重到工作时间(持续时间)。我想我需要以任何方式使用 minif 和 maxif。

您能帮帮我或给我一点小费吗?

最好的问候, 斯科蒂

【问题讨论】:

  • 预期结果是什么?

标签: datetime google-bigquery duration


【解决方案1】:

我能够编写查询来实现您的目标。为此,我使用了MAX()MIN() 内置函数来获取特定传感器的时间戳的最大值和最小值。这两个函数都可以用于除ARRAY STRUCT 之外的任何数据类型。除此之外,TIMESTAMP_DIFF() 还用于检索两个时间戳之间的差异。

我必须指出,我已将您在问题中提供的数据上传到表格中,以便复制该案例。下面是 StandardSQL 的查询:

SELECT Sensor, MAX(timestamp) AS max_ts , 
MIN(timestamp) AS min_ts, 
TIMESTAMP_DIFF(MAX(timestamp), MIN(timestamp), SECOND) AS duration_ 
FROM `project_id.dataset.table` 
WHERE Sensor > 1
GROUP BY Sensor

还有输出,

Row Sensor    max_ts                  min_ts                  duration_seconds
1   1.2972147 2020-05-13 08:45:38 UTC 2020-05-13 08:45:33 UTC 5
2   1.4879817 2020-05-13 08:46:22 UTC 2020-05-13 08:43:24 UTC 178
3   1.2590615 2020-05-13 08:43:08 UTC 2020-05-13 08:42:47 UTC 21
4   1.5642884 2020-05-13 08:44:32 UTC 2020-05-13 08:43:42 UTC 50

注意在TIMESTAMP_DIFF() 中必须指定一个日期部分,在这种情况下我选择了SECONDS。虽然,还有其他可用的日期部分,here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2011-04-09
    • 2011-11-05
    相关资源
    最近更新 更多