移调两行成单行(MySQL的)

移调两行成单行(MySQL的)

问题描述:

在MySQL我有这种表(DATAS):移调两行成单行(MySQL的)

enter image description here

我想要做的是让日期,温度传感器(1)传感器(2)的温度在单排(按日期分组)。

现在我有两个记录的传感器1和传感器2相同的DTG ...

谢谢

+0

这也看起来像你正在使用DS18S20(我要在黑暗中刺伤)一个RPi。我刚刚做了同样的事情,并有一些代码用于生成时间序列数据,可能会帮助您 - https://gist.github.com/calcinai/801e4e805139cd18278e45c5da090340 – calcinai

使用GROUP_CONCAT

SELECT dtg, GROUP_CONCAT(temperature ORDER BY sensor_id) 
FROM yourTable 
GROUP BY dtg 

演示在这里:

SQLFiddle

+0

好的但“group_concat”将连接两个值由昏迷分开?有没有办法为每个传感器获取属性?例如(dtg,temp1,temp2)? – Ferguson

+0

'为每个传感器分开属性... ...你是什么意思? –

+0

现在我有dtg属性和(temp1,temp2)作为单一属性..我想要的是得到dtg,temp1,temp2(如果可能) – Ferguson

您可以使用self join

SELECT 
    a.dtg AS dtg1, 
    a.sensor_id AS sensor_id1, 
    a.temperature AS temperature1, 
    b.sensor_id AS sensor_id2, 
    b.temperature AS temperature2 
FROM yourTable AS a 
LEFT JOIN yourTable AS b 
    ON a.dtg = b.dtg 
    AND NOT a.sensor_id = b.sensor_id 
GROUP BY a.dtg 
+0

凯伊与您的选择语句我得到重复值... http://s5.postimg.org/4mkm8my2v/screenshot_1236 .jpg – Ferguson

+0

@弗格森更新 – Kaii

这不是理想的硬编码在查询这些值,但这是行转置到列的解决方法:

SELECT dtg, 
    COALESCE(IF(sensor_id='28-000004a9fa09', temperature, NULL)) t1, 
    COALESCE(IF(sensor_id='28-000004aa21cd', temperature, NULL)) t2 
FROM readings 
GROUP BY dtg 

您可能需要与打如果您开始获得不可预测的时间读数,则会进行汇总。尤其是考虑到DB18B20有时可能需要一段时间才能阅读,所以有可能会让秒数重叠。