我最近使用MySQL构建了我的第一个数据库。我用它每十分钟记录十个不同传感器的数据。每个传感器都有一个唯一的ID,所有传感器同时读出,以便10个条目获得相同的时间戳。数据库如下所示:
sensor_id | timestamp | sensor_value |
1 | 2016-06-13 20:40:00 | 19.1 |
2 | 2016-06-13 20:40:00 | 20.1 |
3 | 2016-06-13 20:40:00 | 21.5 |
.
.
.
10 | 2016-06-13 20:40:00 | 18.7 |
1 | 2016-06-13 20:50:00 | 19.4 |
2 | 2016-06-13 20:50:00 | 20.2 |
3 | 2016-06-13 20:50:00 | 22.1 |
.
.
.
10 | 2016-06-13 20:50:00 | 17.9 |
.
.
.
现在我想以这样一种方式导出数据:每个时间戳都有一行,其中包含十个传感器值的十个后续列:
| 1 | 2 | 3 | ... | 10 |
2016-06-13 20:40:00 | 19.1 | 20.1 | 21.5 | ... | 18.7 |
2016-06-13 20:50:00 | 19.4 | 20.2 | 22.1 | ... | 17.9 |
.
.
.
我尝试使用GROUP_CONCAT,几乎得到了我想要的东西。但这给了我一列中的所有传感器值作为逗号分隔列表
timestamp | GROUP_CONCAT(sensor_value) |
2016-06-13 20:40:00 | 19.1,20.1,21.5,...,18.7 |
2016-06-13 20:50:00 | 19.4,20.2,22.1,...,17.9 |
.
.
.
不幸的是,有时其中一个传感器无法提供其值,并且没有任何条目添加到我的数据库中。因此,有时只有九个值具有相同的时间戳。逗号分隔列表无法告诉我哪些传感器丢失了。这就是我每个唯一传感器ID需要一列的原因。有没有办法实现这个目标?
我尝试通过浏览Stack Overflow来解决这个问题,但由于我对MySQL和数据库相当新,所以我没有在没有发布新问题的情况下解决问题。如果在我很抱歉之前已经被问到并得到了答复,如果有人将我改行方向,我会很高兴。
谢谢!
答案 0 :(得分:0)
只需使用条件聚合:
select timestamp,
max(case when sensor_id = 1 then sensor_value end) as sensor_1,
max(case when sensor_id = 2 then sensor_value end) as sensor_2,
. . .
from t
group by timestamp;