MySQL - 一行中具有相同时间戳的所有条目

时间:2016-06-13 18:54:58

标签: mysql sql database group-concat

我最近使用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和数据库相当新,所以我没有在没有发布新问题的情况下解决问题。如果在我很抱歉之前已经被问到并得到了答复,如果有人将我改行方向,我会很高兴。

谢谢!

1 个答案:

答案 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;