我有一个气象站,将风速和方向发送到mysql数据库。我正在尝试显示玫瑰图,但为此我需要以特定格式显示数据。
我有以下查询:
select windspeed/10,wind_dir from weather
where windspeed/10 < 0.5
and
date >= NOW() - INTERVAL 1 DAY
返回:
windspeed wind_dir
0.4 nne
0.1 ese
0.2 e
0.2 sw
0.7 w
1.0 ssw
为了正确显示数据,我需要显示不存在的条目的风向,即0表示n,0表示se,0表示ne等
所以
windspeed wind_dir
0.4 nne
0.1 ese
0.2 e
0.2 sw
0.7 w
1.0 ssw
0 se
0 ne
0 n
所有其他风向的等等等。
这可以在mysql查询中做到吗?
答案 0 :(得分:1)
尝试这样的事情:
SELECT DISTINCT(w1.wind_dir) AS dir, IFNULL(ws/10,0) AS speed FROM weather w1 LEFT JOIN (
select windspeed as ws, wind_dir as wd from weather w2
where w2.windspeed/10 < 0.5
and w2.date>=NOW()-INTERVAL 1 DAY
) wth ON w1.wind_dir=wd;
这将要求每个风向至少在表格中存在一次。
首先在表格中查找所有不同的wind_dir值。然后它将这些结果与日期在1天内的结果相结合,以确保包含所有不同的风向。最后,它将windspeed的任何空值换成0,因为丢失的记录将显示为null windspeed(ws)值。
答案 1 :(得分:0)
希望这适用于您的场景:
select ifnull(windspeed/10,0),wind_dir from weather
where windspeed/10 < 0.5
or windspeed = 0
and date >= NOW() - INTERVAL 1 DAY
答案 2 :(得分:0)
确定。以下是我认为可以解决的问题:
将wind_direction取出到新表并与天气建立FK关系
填写所有可能的方向,如n,e,s,w,ne,nw,se,sw
使用wind_direction的左连接天气表。
以下是示例查询:
SELECT IFNULL(wind_speed/10,0),wind_direction
FROM wind_direction wd
LEFT JOIN weather w ON w.wind_direction_id=wd.id
WHERE windspeed/10 < 0.5
AND date >= NOW() - INTERVAL 1 DAY