2017-12-15 12 views
1

ように、私はテーブルを持っている:sql - 値をグループ化するにはどうすればよいですか?

> SELECT * FROM tempLog WHERE DATE(ts) = CURDATE() LIMIT 9; 

+-------+---------------------+----------+-------+-------+ 
| id | ts     | sensorid | value | event | 
+-------+---------------------+----------+-------+-------+ 
| 11020 | 2017-12-15 00:00:01 |  3 | 18.1 | cron | 
| 11021 | 2017-12-15 00:00:01 |  4 | 14.8 | cron | 
| 11022 | 2017-12-15 00:00:01 |  5 | 1.3 | cron | 
| 11023 | 2017-12-15 00:02:02 |  3 | 18.1 | cron | 
| 11024 | 2017-12-15 00:02:02 |  4 | 14.8 | cron | 
| 11025 | 2017-12-15 00:02:02 |  5 | 1.3 | cron | 
+-------+---------------------+----------+-------+-------+ 

は、すべての異なる「タイムスタンプ」と異なるから、それぞれの値を取得するを選択し、なるように、私は

+---------------------+---------+---------+---------+ 
| ts     | sensor3 | sensor4 | sensor5 | 
+---------------------+---------+---------+---------+ 
| 2017-12-15 00:00:01 | 18.1 | 14.8 | 1.3 | 
| 2017-12-15 00:02:02 | 18.1 | 14.8 | 1.3 | 
+---------------------+---------+---------+---------+ 

を取得するクエリを構築することが可能ですその時のセンサー。

センサは後でより多くなるので、私はそれを考慮に入れなければならないでしょう。 これらはすべて同じタイムスタンプでポーリングされます。

おかげ /JON

+0

あなたは、MS SQLでPIVOTを使用することができます。https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – NonProgrammer

+0

場合'ts、group_concat(concat( 's、' sensorid、 ':'、value))センサーをtemplogから選択してください。 グループby ts' – tonypdmtr

答えて

1
select ts, 
     max(case when sensorid = 3 then value else 0 end) as sensor3, 
     max(case when sensorid = 4 then value else 0 end) as sensor4, 
     max(case when sensorid = 5 then value else 0 end) as sensor5 
from your_table 
group by ts 
+0

私は同じ考えを持っていました。しかし、OPは、そのセンサーは後でon_でより多くなるだろうと言っています。ある種のループは、より良いでしょう(例えば、ループからsensoridは何でも) – Fleury26

+0

優秀! 私はアカウントのセンサーの数を取るいくつかのPHPでSQLを構築します。 最大(ケースを解決した場合) /jon – jonsag

関連する問題