2016-12-19 9 views
-2

リンクされた回答(MySQL - Rows to Columns)が私が求めていることとは関係がなくても、私の最後の質問は重複としてマークされていました。その投稿はおそらくここでは動作しないピボットテーブルを参照しています。再度転記する。テーブルからのマージSQL行

次のデータを持つ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 | 
+-------------+---------------+---------------+--------------------+---------------------+------------+--------------+ 

このデータのスキーマにはほとんど考慮されていないため、2番目ごとの行はすべて同じ識別子とsensor_level値を持つ同じデータを共有します。私は、sensor_map_idを共有する行をマージするクエリを作成し、sensor_levelデータを保持する2つの追加の列をそれぞれ「レベル」と「温度」という2つの行から追加します。

一度フォーマットされると、データは半分の行でこのようになりますが、各行にはさらに多くの列があります。

+-------------+---------------+---------------+--------------------+- --------------------+------------+---------+ 
| 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は自分の特権ではありません。

編集:これが重複としてマークされている理由はわかりません。もう一つの質問は、ピボットテーブルについて質問していますが、これはもっと複雑です。

+0

を追加することができます。それ以上の複雑さはありません。 – Strawberry

+0

あなたはそれをどうやって行うのかという例を教えてもらえますか? – user1901469

+0

あなたのサンプルデータでは、同じ 'sensor_map_id'(例えば1380)には2つの' sensor_log_id'(788551と788552)があります。あなたの希望のピボットテーブルでは、 'sensor_log_id'のための列は1つしかなく、サンプル出力は値(788551)のうちの1つだけを選択しました。それは本当にあなたが望むものですか? – leeyuiwah

答えて

0

あなたのテーブルがdata呼ばれると仮定すると、以下の クエリは、次の3つのキー列sensor_map_idlevel、およびtempatureを取得します。必要に応じて他の列 を追加することができます。 sensor_log_id のいずれかが行います場合たとえば、あなただけのこれが基本的なピボットであるtL.sensor_log_idまたは min(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 
関連する問題