从表中合并sql行

时间:2016-12-19 23:26:38

标签: mysql aggregate

所以我的上一个问题被标记为重复,即使链接的答案(MySQL - Rows to Columns)与我的要求无关。该帖子指的是可能在这里不起作用的数据透视表。再次发帖。

我有一个包含以下数据的mysql表。

+-------------+---------------+---------------+--------------------+-    --------------------+------------+--------------+
| identifier  | sensor_map_id | sensor_log_id | device_post_log_id | sensor_component_id | logged_at  | sensor_level |
+-------------+---------------+---------------+--------------------+-    --------------------+------------+--------------+
| Level       |          1380 |        788551 |             107392 |                2759 | 1463690100 |        38.00 |
| Temperature |          1380 |        788552 |             107392 |                2760 | 1463690100 |       300.60 |
| Level       |          1381 |        788547 |             107392 |                2761 | 1463690100 |        46.00 |
| Temperature |          1381 |        788548 |             107392 |                2762 | 1463690100 |       299.50 |
| Level       |          1382 |        788549 |             107392 |                2763 | 1463690100 |        45.00 |
| Temperature |          1382 |        788550 |             107392 |                2764 | 1463690100 |       299.50 |
| Level       |          1383 |        100381 |              12664 |                2765 | 1454111400 |       153.00 |
| Temperature |          1383 |        100382 |              12664 |                2766 | 1454111400 |       295.20 |
| Level       |          1383 |        788553 |             107392 |                2773 | 1463690100 |        38.00 |
| Temperature |          1383 |        788554 |             107392 |                2774 | 1463690100 |       300.40 |
+-------------+---------------+---------------+--------------------+---------------------+------------+--------------+

很少考虑这个数据的模式,因此每隔一行与不同的标识符和sensor_level值共享相同的数据。我想创建一个将合并共享一个sensor_map_id的行的查询,然后添加两个额外的列,分别保存来自两行的sensor_level数据,分别称为“level”和“temperature”。

格式化后,数据应该看起来像这样,行数减半,但每行有更多列。

+-------------+---------------+---------------+--------------------+-    --------------------+------------+---------+
| sensor_map_id | sensor_log_id | device_post_log_id | sensor_component_id | logged_at  | level        | temperature
+---------------+---------------+--------------------+-    --------------------+------------+--------------+--------
| 1380          |        788551 |             107392 |                2759 | 1463690100 |        38.00 | 300.60
| 1381          |        788547 |             107392 |                2761 | 1463690100 |        46.00 | 299.50
| 1382          |        788549 |             107392 |                2763 | 1463690100 |        45.00 | 299.50
| 1383          |        100381 |              12664 |                2765 | 1454111400 |       153.00 | 295.20
| 1383          |        788553 |             107392 |                2773 | 1463690100 |        38.00 | 300.40
+-------------+---------------+---------------+--------------------+---------------------+------------+-------------+

我想这很容易做到但是Mysql不是我的强项。

编辑:我不确定为什么这被标记为重复。另一个问题是询问数据透视表,这更复杂。

1 个答案:

答案 0 :(得分:0)

假设您的表名为data,请执行以下操作 查询将为您提供三个关键列sensor_map_idleveltempature。您可以添加其他列 如所须。例如,如果其中一个sensor_log_id 会这样做,你可以添加tL.sensor_log_idmin(tL.sensor_log_id, tT.sensor_log_id)

select
    tL.sensor_map_id 
    , tL.level
    , tT.tempature
from 
    (
        select
            tL.sensor_map_id
            , tL.level
        from data tL
        where identifier='Level'
    ) as tL
    , (
        select
            tT.sensor_map_id
            , tT.tempature 
        from data tT
        where identifier='Tempature'
    ) as tT 
where 
    tL.sensor_map_id = tT.sensor_map_id