2017-08-28 197 views
0

我有一个MySQL表 'weather_data' 它具有以下字段:如何更新每天最大值的行?

  • ID
  • 温度
  • 时间
  • MAX_TEMPERATURE

它得到每15分钟更新一次。 用下面的MySQL命令,我可以看到每天的最高温度值:

SELECT MAX(temperature) FROM 'weather_data' GROUP BY DAY(time) 

我要的是一个MySQL命令,它经过我的所有数据,发现每一天,在每一个行更新的最高温度带有当时温度的max_temperature字段。 因此,如果我有七天的数据,我想用max_temperature更新7行。

这可能吗?

+0

参见[我为什么要提供什么似乎我的MCVE是一个非常简单的SQL查询(http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -for - 什么 - 似乎对我将要-A-极简单的SQL查询) – Strawberry

+0

这当然是可能的,但是它是一个好主意?您复制一个数据点,一天中的最大温度,超过95行。为什么不制作一张每日一行的新表格,其中包含所有日常数据?这种做法被称为“正常化”,请参阅:https://en.wikipedia.org/wiki/Database_normalization –

回答

0

首先,我想你应该经常储存温度和最高温度在两个独立的表。

第二,如果你还是喜欢你的模式,你可以做这样的事情:

UPDATE weather_data 
INNER JOIN (
    SELECT MAX(temperature) as temperature, DAY(time) as date 
    FROM weather_data GROUP BY DAY(time) 
) max_temp 
ON max_temp.date = DAY(time) 
SET weather_data.max_temperature = max_temp.temperature 

编辑:

如果你想用两个表的方法,我建议您有以下表格:

weather_data:

  • ID
  • 温度
  • 时间

max_daily_temperature:

  • ID
  • MAX_TEMPERATURE
  • 日期

至于插入:我想你已经照顾weather_data的,但对于max_daily_temperature,这将是这样的:

INSERT INTO max_daily_temperature 
SELECT DATE(time), MAX(temperature) 
FROM weather_data 
WHERE DATE(time) = '2017-08-30' 

和更新:

UPDATE max_daily_temperature 
SET max_temperature = (
    SELECT MAX(temperature) 
    FROM weather_data 
    WHERE DATE(time) = '2017-08-30' 
) 
WHERE date = '2017-08-30' 

如果这是你正在看,不要忘记将答案标记为解决方案。

+0

谢谢!是否有可能只有最高温度的行才能获得此值(max_temperature)?通过此代码,一天中的所有行均填充相同的max_temperature值。 – Fenderman

+0

思考一下,你可能是对的,新桌子会更有意义。将这些值保存在名为“weather_data_daily”的新表中的值为time和max_temperature的代码是什么?所以每一天都有一排。 – Fenderman

+0

请检查我的答案更新,并告诉我这是否适用于您。 – Lamar