【问题标题】:MySQL finding MAX of a given field and returning the entire rowMySQL查找给定字段的MAX并返回整行
【发布时间】:2026-01-09 20:15:01
【问题描述】:

简介

嗨,
我有一个气象站,每半小时记录一次当前天气。
在其他传感器中,它有一个温度计。这是本次调查的主题。
我已经总结了表格的字段,但请注意HiTemp 字段存储最高温度。

情况

在 SQL 查询中给出以下表结构

CREATE TABLE weather (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    HiTemp FLOAT,
    Date VARCHAR(8),
    Time VARCHAR(5),
    Epoch BIGINT
);

请注意 HiTemp 以摄氏度存储,Date 遵循 dd/mm/YY 格式,Time 以 CET (GMT+1) 时区存储
因此,样本记录将是..

1, 19, "13/12/19", "13:00", 1576238400

我的目标是对记录进行排序,并在表中的其他字段中找到 HiTemp 的最大值。
要查找唯一年份,Date 上的简单子字符串可以正常工作

SELECT SUBSTR(Date, -2) AS Year FROM weather GROUP BY Year;

多年来,我一直在考虑使用PROCEDURE(函数)来使用某种循环
这里的这个查询是我自己能够弄清楚的最接近我的目标的查询

SELECT MAX(HiTemp) MaxTemp, SUBSTR(Date, -2) Year, Date, Time FROM weather GROUP BY Year;

这里的问题是,据我所知MAX 是一个组函数,而其他选定的字段与其值无关
然而,该查询的输出将具有如下格式

40.1, 19, "28/06/19", "17:00"
37.5, 18, "04/08/18", "14:00"
35.5, 17, "05/08/17", "15:30"

请注意这些记录是正确的,因为生成的选定字段属于同一记录(它们是精心挑选的)

有什么想法吗?子查询、联接、过程.. 对此的任何见解都非常感谢,我现在很迷茫。
谢谢。

【问题讨论】:

  • 这是 40,1, 37.5 的列 .. 不清楚 ..
  • 使用适当的日期数据类型存储日期。
  • @scaisEdge 即温度,请看上面的查询字段参考

标签: mysql weather


【解决方案1】:

您可以使用带有子查询的查询来获取按年计算的最大临时组

select  * from  weather w
INNER JOIN  ( 
  select  MAX(HiTemp) MaxTemp,  SUBSTR(Date, -2) Year 
  FROM weather GROUP BY Year

  ) t on t.MaxTemp = w.HiTemp and t.year =  SUBSTR(w.Date, -2) 

select  w.HiTemp, t.Year, w.date, w.time  from  weather w
INNER JOIN  ( 
  select  MAX(HiTemp) MaxTemp,  SUBSTR(Date, -2) Year 
  FROM weather GROUP BY Year

  ) t on t.MaxTemp = w.HiTemp and t.year =  SUBSTR(w.Date, -2) Year 

【讨论】:

  • 完美!除了最后一个子字符串别名。但这没关系。我在查询结束时按年添加了一个组,以确保我得到不重复的年份。如果您想知道SELECT * FROM weather w INNER JOIN (SELECT MAX(HiTemp) MaxTemp, SUBSTR(Date, -2) Year FROM weather GROUP BY Year) t ON t.Maxtemp = w.HiTemp AND t.Year = SUBSTR(w.Date, -2) GROUP BY SUBSTR(Date, -2),这是最后一个查询
最近更新 更多