MySQL 查找给定字段的 MAX 并返回整行

MySQL finding MAX of a given field and returning the entire row

简介

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

情况

给定 SQL 查询中的以下 table 结构

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

我的目标是对记录进行排序,并在 table.
中的每一年的其他字段中找到 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"

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

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

您可以将查询与按年分组的最高温度子查询结合使用

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