Pivot a table and display n ordered time series

前端 未结 1 875
暖寄归人
暖寄归人 2021-01-16 12:30

I have a table named \"readings\" which contains data from sensors with the following columns:

id    id_device    date                   value
1     1                


        
1条回答
  •  再見小時候
    2021-01-16 13:07

    Try this:

    SELECT r.id,
           r.`date`,
           GROUP_CONCAT(IF(r.device_id = 1,r.`VALUE`,NULL)) AS device_id_1,
           GROUP_CONCAT(IF(r.device_id = 2,r.`VALUE`,NULL)) AS device_id_2
    FROM readings r
    GROUP BY r.`DATE`
    ORDER BY r.`DATE` ASC;
    
    +----+---------------------+-------------+-------------+
    | id | date                | device_id_1 | device_id_2 |
    +----+---------------------+-------------+-------------+
    |  1 | 2015-10-01 10:00:00 | 2           | 0.5         |
    |  3 | 2015-10-01 10:01:00 | 3.1         | 7.5         |
    +----+---------------------+-------------+-------------+
    2 rows in set (0.00 sec)
    

    And here a Version for dynamic device_id's

    SELECT  group_concat( 
        "GROUP_CONCAT(IF(device_id = ",
        device_id,",`value`,NULL)) AS device_id_",
        device_id
        SEPARATOR ',\n') INTO @sql_mid
    FROM (SELECT DISTINCT device_id FROM readings ORDER BY device_id) AS r
    ORDER BY device_id;
    
    SELECT CONCAT("SELECT id, `date`, ", @sql_mid, " FROM readings GROUP BY `DATE` ORDER BY `DATE` ASC") INTO @sql;
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    It generates all Columns

    +----+---------------------+-------------+-------------+-------------+
    | id | date                | device_id_1 | device_id_2 | device_id_3 |
    +----+---------------------+-------------+-------------+-------------+
    |  1 | 2015-10-01 10:00:00 | 2           | 0.5         | NULL        |
    |  3 | 2015-10-01 10:01:00 | 3.1         | 7.5         | NULL        |
    |  5 | 2015-10-01 10:11:00 | NULL        | NULL        | 9.9         |
    +----+---------------------+-------------+-------------+-------------+
    3 rows in set (0.00 sec)
    

    0 讨论(0)
提交回复
热议问题