2016-09-27 2 views
1

в MySql У меня есть этот вид таблицы (ДАННЫЕ):Транспонирование две строки в одной строке (MySql)

enter image description here

То, что я хочу сделать, это получить дату, температуру датчика (1), температура для датчика (2) в одной строке (группа по дате).

Теперь у меня есть две записи для одного DTG для датчика 1 и датчика 2 ...

благодарю вас

+0

Это также похоже на то, что вы используете DS18S20 (я собираюсь нанести удар в темноте) RPi. Я только что делал то же самое, и имею немного кода для создания временных рядов данных, которые могли бы вам помочь - https://gist.github.com/calcinai/801e4e805139cd18278e45c5da090340 – calcinai

ответ

2

Использование 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

1

Вы можете использовать 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

Kaii с вашим предложением выбора Я получаю дублированные значения ... http://s5.postimg.org/4mkm8my2v/screenshot_1236 .jpg – Ferguson

+0

@Ferguson обновлено – Kaii

1

Это не идеальный жестко прописывать эти значения в запросе, но это временное решение, чтобы перенести строки в столбцы:

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 

Вам может понадобиться, чтобы играть с агрегаты, если вы начнете получать непредсказуемые показания времени. Особенно учитывая, что DB18B20s иногда может занять некоторое время, чтобы прочитать, возможно, вы можете перекрывать секунды.

Смежные вопросы