2016-05-07 6 views
0

は、私は、クエリクエリは、MySQLの

kWh_date   temp rh co2 
2016-05-0712:45:00 18.1 51.4 476 
2016-05-0713:00:00 18.79 51.2 718 

からMySQLの以下のテーブル構造を持つテーブルと所望の出力

historical_id grd_id register_type timestamp   address value historical_type insertion_time 
     5358  2   11 2016-05-07 12:45:00  1 18.1    1 2016-05-07 13:44:58 
     5359  2   11 2016-05-07 12:45:00  2 51.4    1 2016-05-07 13:44:58 
     5360  2   11 2016-05-07 12:45:00  3 476     1 2016-05-07 13:44:58 
     5364  2   11 2016-05-07 13:00:00  1 18.79    1 2016-05-07 13:59:58 
     5365  2   11 2016-05-07 13:00:00  2 51.2    1 2016-05-07 13:59:58 
     5366  2   11 2016-05-07 13:00:00  3 718     1 2016-05-07 13:59:58 

所望の出力を持つことができます誰でもどのように私は希望の出力を得るように助けてください。私はタイムスタンプ(この名前を使用する私の決定ではなく、それを変更することはできません)によって 'グループ'にしようとしましたが、それは私に1セットのデータ(すなわち 'アドレス' 1)を表示します。私は3つの 'SELECT'ステートメントを使用しましたが、それは繰り返されるタイムスタンプを示しています。どんな助けも大歓迎です。

私は別のクエリを試みたが、彼らはまた、失敗に終わる

SELECT `register_type` 
    , `timestamp` 
    , `address` 
    , `value` 
    FROM grdxf.historical 
WHERE `register_type` = 11 
GROUP 
    BY `timestamp`; 

を試してみました。私は本当に失っているし、クエリに新しいです。

+0

あなたの質問を編集し、あなたが書かれているSQL文を含めてください。 –

+0

タイムスタンプだけでグループ化するのではなく、実際に 'timestamp、address'でグループ化したいのですか? – cars10m

+0

これはなんですか?与えられたテーブル構造とその望ましい出力との間に関係を与えたり、与えられたテーブル構造から達成しようとしていることを教えてください。 – Sachin

答えて

1

例えば:

SELECT FROM_UNIXTIME(900 * FLOOR(UNIX_TIMESTAMP(timestamp)/900)) timestamp 
    , MAX(CASE WHEN address = 1 THEN value END) temp 
    , MAX(CASE WHEN address = 2 THEN value END) rh 
    , MAX(CASE WHEN address = 3 THEN value END) co2 
    FROM historical 
WHERE register_type = 11 
GROUP 
    BY timestamp; 
+0

Strawberryありがとう、あなたのクエリを少し変更し、それは働いた。これはわかりませんが、これは私が変更したものです........ SELECT 'timestamp' 、MAX(CASEアドレス= 1 THEN'値 'END)temp 、MAX(CASE WHEN address = 2 THEN 'value' END)rh 、MAX(CASEアドレス= 3その次の' value' END)co2 FROM grdxf.historical where register_type = 11 GROUP BYタイムスタンプ; –