2016-09-27 3 views
1

私はテーブルのこの種の(件のデータを)持っている:トランス二列(MySQLの)

enter image description here

私が何をしたいのか、日付、センサーの温度(1)を取得することで、センサ(2)の温度は1行(日付順)に表示されます。

今はセンサ1とセンサ2に同じDTGのための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"は連結されますが2つの値は昏睡で区切られています各センサーの属性を取得する方法はありますか?たとえば(dtg、temp1、temp2)? – Ferguson

+0

'各センサのために分離された属性 '...これはどういう意味ですか? –

+0

今、私はdtg atributeと(temp1、temp2)を1つの属性として持っています。私が望むのは、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

あなたの選択した声明で私は重複した値を得ます... 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 

あなたが一緒にプレイする必要があるかもしれません予期せぬ時間の読みを得るようになると集約します。特にDB18B20の場合、読み込みに時間がかかることがあるので、秒が重なる可能性があります。