2017-11-03 10 views
0

私は今、4つの個のクエリを実行して、必要な情報を選択しています。Mysqlクエリ複数の行のデータを選択

f.e.

SELECT value FROM data where sensor=123 AND value_id=a 
SELECT value FROM data where sensor=123 AND value_id=b 
SELECT value FROM data where sensor=123 AND value_id=c 
SELECT value FROM data where sensor=123 AND value_id=d 

私はいくつかのコードでプレキュアしています。私は、正しい方法であれば知っているが、そのようなことも可能であるしないでください。

SELECT value180,value181,value182,value183 
     FROM (
      SELECT 
      MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) as value180, 
      MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) as value181, 
      MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) as value182, 
      MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) as value183 
      FROM data 
      WHERE sensor_id = 1605850 
      AND value_id IN ("1.8.0","1.8.1","1.8.2","1.8.3") 
     ) a 

事前に支援するための単一のクエリ... THXを持っていいだろう!

注:値ごとにセンサごとに毎日の最大値を使用する必要があります。上記の第1の例では、このmax関数は単純化のために省略した。あなたは、各VALUE_IDため時給取る値がある見ることができるように enter image description here

これは、それがどのように見えるかのテーブルです。

必要なもの: 定義されたvalue_idのには、昨日の最高値が必要です。

f.e. 1.8.0 = 3726.12、1.8.1 = 663.69、...私は間違った値しかし形式私は値を取得する方法をを取得しています私の複合クエリーで

は正しいです:

enter image description here

+0

これらの2つは非常に異なることを達成しています...あなたが得たいものとテーブルを入手していることを説明すれば、おそらく – Alfabravo

+0

からクエリが正常に動作するはずです。 – XING

+0

いいえ、私はエラーが表示されませんが、私はそれぞれの値に対して1つの同じ値を取得しています。 (値180、値181、値182、値183 =すべて同じ値)。私はin value180などの値が必要です... – user3882511

答えて

2

SELECT value FROM data 
WHERE sensor=123 AND value_id IN ('a', 'b', 'c' , 'd'); 

または

を試してみてください
SELECT value FROM data 
WHERE sensor=123 AND value_id IN (SELECT DISTINCT value_id FROM data); 
+0

私は 'GROUP BY'オプションも追加します –

+0

これは質問に対する正解ではありません。 Plesaeはもう一度それを読んだ。 – XING

+0

彼は「私は正しい方法であればわからない」と指定し、現在は4行のコードで作業しています。私の答えはそれです。 – JBR

0

休憩を取るために自然を歩いた後、私は自分の問題を解決することができました。

SELECT 
(SELECT MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) FROM data WHERE sensor_id = 1605850 AND value_id = "1.8.0") as value180, 
(SELECT MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) FROM data WHERE sensor_id = 1605850 AND value_id = "1.8.1") as value181, 
(SELECT MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) FROM data WHERE sensor_id = 1605850 AND value_id = "1.8.2") as value182, 
(SELECT MAX(CASE WHEN DATE(time) = subdate(CURDATE(), 1) THEN value ELSE 0 END) FROM data WHERE sensor_id = 1605850 AND value_id = "1.8.3") as value183 

です。

関連する問題