0

誰かがここで私を助けてくれることを望んでいました。

mysql でクエリを作成しようとしていますが、正しい構文を取得するのに非常に苦労しています。私がやろうとしていることを説明しましょう。

建設用の測定データを格納するテーブルがあり、各エントリには location_id、room_id、measurement_value、floor_num、measurement_date があります。各フロアから最新の測定データを取得するクエリを作成しようとしています (2 つのフロアしかありません)。だから私はこのようなことを考えていましたが、うまくいきません。

 select bottom_floor.value as bottom_value, top_floor.value as top_value
 from 
 (select measurement_value, measurement_date, floor_num, room_id from rom_measurements where location_id = '1' and floor_num='1' order by measurement_date DESC limit 1) as bottom_floor
 Join 
 (select measurement_value, measurement_date, floor_num, room_id from rom_measurements where location_id = '1' and floor_num='2' order by measurement_date DESC limit 1) as top_floor

これで2つの値が返ってくると思いました。2 つのサブクエリのいずれかが空のセットを返す場合、それは機能しないことがわかりました。また、ここで他のことを間違ったことをしたと確信しています。

誰かがこれを達成するためのより良い方法を推奨できますか?

ありがとう!

4

1 に答える 1

1

フロア上のすべての部屋の総面積:

select square, measurement_date, floor_num
from room_measurements rm
join (
  select location_id, floor_num, max(measurement_date) as date, sum(measurement_value) as square
  from room_measurements 
  group by location_id, floor_num    
) rm2 
ON rm.measurement_date=rm2.date AND rm.location_id=rm2.location_id AND rm.floor_num=rm2.floor_num
WHERE location_id = '1'

フロアの各部屋の正方形:

select measurement_value, measurement_date, floor_num, room_id
from room_measurements rm
join (
  select location_id, floor_num, room_id, max(measurement_date) as date
  from room_measurements 
  group by location_id, floor_num, room_id    
) rm2 
ON rm.measurement_date=rm2.date AND rm.location_id=rm2.location_id AND rm.floor_num=rm2.floor_num AND rm.room_id = rm2.room_id
WHERE location_id = '1'
于 2012-12-09T11:37:52.517 に答える