【发布时间】:2019-03-26 14:26:44
【问题描述】:
记录设备的每个故障。每个条目都包含一个 customer_id、device_id 和时间戳:
+-------------+-----------+-----------------------+
| customer_id | device_id | timestamp |
+-------------+-----------+-----------------------+
| 1 | 1 | 2019-02-12T01:00:00 |
| 2 | 2 | 2019-02-12T01:00:00 |
| 1 | 1 | 2019-02-12T02:00:00 |
| 1 | 1 | 2019-02-12T03:00:00 |
+-------------+-----------+-----------------------+
每小时收集一次故障日志。我对以下信息感兴趣:
- 每位客户每天的故障总数
- 每位客户每天的连续故障次数
- 每位客户每天的非连续故障数
设备可能出现故障数小时,这可能表示硬件故障。另一方面,如果设备出现不超过数小时的故障,则可能只是设备使用不当。
结果应该是这样的:
+-------------+-----------+---------------------+-----------------+------------+-----------------------+
| customer_id | device_id | total | consecutive | non consecutive | day | last_recording |
+-----+-------------------+-------+-------------+-----------------+------------------------------------+
| 1 | 1 | 3 | 1 | 2 | 2019-02-12 | 2019-02-12T03:00:00 |
| 2 | 2 | 1 | 0 | 1 | 2019-02-12 | 2019-02-12T01:00:00 |
+-------------+-----------+-------+-------------+-----------------+------------+-----------------------+
在上面的示例中,设备 1 在 2019-02-12T02:00:00 报告了一个故障,这被认为是“非连续的”,然后在 2019-02-12T03:00:00 报告了另一个故障,这被认为是“连续”。
我想创建一个查询,生成这样的结果。我试过的
SELECT customer_id, device_id, COUNT(customer_id) AS count, FORMAT_TIMESTAMP("%Y-%m-%d", TIMESTAMP(timestamp)) as day
FROM `malfunctions`
GROUP BY day, customer_id, device_id
这样我可以得到客户每天的故障总数。我想我必须使用 LEAD 运算符来获得(非)连续计数,但我不确定如何。有任何想法吗?结果应该是按天“滚动”的。
【问题讨论】:
标签: google-bigquery