首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL更新最大时间戳的值

MYSQL更新最大时间戳的值
EN

Stack Overflow用户
提问于 2018-04-02 19:26:59
回答 2查看 356关注 0票数 1

我有一个疑问:

从民航组织=“SSPB”的天气中选择*,从民航组织=“SSPB”的天气中选择时间戳=(选择最大值(时间戳));

结果:

代码语言:javascript
复制
timestamp, ICAO, time, wind_angle, wind_speed, gust, visibility, condition, sky, temp, dew, pressure, humidity

2018-04-02 19:20:01, SSPB, 021919, 230, 03, , 9999, , SCT026, 23, 17, 1012, 67%

现在我将使用与select相同的方法进行更新。

更新天气集wind_speed = '10‘,其中国际民航组织= 'SSPB’和时间戳=(选择最大(时间戳)从天气民航组织= 'SSPB');

我知道这个错误:

错误代码: 1093。不能指定目标表“天气”以便在FROM子句中进行更新

EN

回答 2

Stack Overflow用户

发布于 2018-04-02 19:44:53

您是派生合并优化的受害者。但是,您可以通过创建临时表并避免使用另一个select行。试试这个:

代码语言:javascript
复制
update weather set wind_speed = '10' where ICAO = 'SSPB' and timestamp =
( select c.cTime from 
      (select max(timestamp) as cTime 
       from weather where ICAO = 'SSPB'
       ) as c
);
票数 0
EN

Stack Overflow用户

发布于 2018-04-02 19:47:31

一个可能的解决方法是连接到内联视图(派生表)。我们可以用SELECT语句.

代码语言:javascript
复制
SELECT t.*
  FROM weather t
  JOIN ( SELECT q.ICAO
              , MAX(q.timestamp) AS max_timestamp
           FROM weather q
          WHERE q.ICAO = 'SSPB'
          GROUP BY q.ICAO
       ) s
    ON t.ICAO      = s.ICAO
   AND t.timestamp = s.max_timestamp 
 WHERE t.ICAO = 'SSPB' 

同样的模式也适用于UPDATE。通过用SELECT ... FROM替换UPDATE并在WHERE子句之前添加SET子句,我们可以将SELECT语句转换为UPDATE:

代码语言:javascript
复制
 UPDATE weather t
  JOIN ( SELECT q.ICAO
              , MAX(q.timestamp) AS max_timestamp
           FROM weather q
          WHERE q.ICAO = 'SSPB'
          GROUP BY q.ICAO
       ) s
    ON t.ICAO      = s.ICAO
   AND t.timestamp = s.max_timestamp 
   SET t.wind_speed = '10'
 WHERE t.ICAO = 'SSPB' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49617524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档