Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查找给定字段的最大值并返回整行 介绍_Mysql_Weather - Fatal编程技术网

MySQL查找给定字段的最大值并返回整行 介绍

MySQL查找给定字段的最大值并返回整行 介绍,mysql,weather,Mysql,Weather,嗨, 我有一个气象站,每半小时记录一次当前天气。 在其他传感器中,它有一个温度计。这是这次调查的主题。 我已经总结了表中的字段,但请注意HiTemp字段存储的是最高温度 情况 给定SQL查询中的以下表结构 CREATE TABLE weather ( Id INT AUTO_INCREMENT PRIMARY KEY, HiTemp FLOAT, Date VARCHAR(8), Time VARCHAR(5), Epoch BIGINT ); 请注意,

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

情况 给定SQL查询中的以下表结构

CREATE TABLE weather (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    HiTemp FLOAT,
    Date VARCHAR(8),
    Time VARCHAR(5),
    Epoch BIGINT
);
请注意,HiTemp以摄氏度为单位存储,日期采用dd/mm/YY格式,时间以CET GMT+1时区为单位存储 因此,样本记录应为

1, 19, "13/12/19", "13:00", 1576238400
我的目标是对记录进行排序,并在表中的其他字段中找到HiTemp的最大值。 要找到唯一的年份,日期上的一个简单子字符串可以很好地工作

SELECT SUBSTR(Date, -2) AS Year FROM weather GROUP BY Year;
我在考虑使用一个过程函数,以便能够使用某种循环来处理这些年 这里的这个问题是最接近我自己的目标的

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  * 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) 


这是40,1,37.5的列。。si不清楚..使用正确的日期数据类型存储日期。@scaisEdge这是温度,请查看上面的字段参考查询,这是40,1,37.5的列。。si不清楚..使用正确的日期数据类型存储日期。@scaisEdge这是温度,请查看上面的查询以获得字段referencePerfect!除了最后一个子串别名。但这并不重要。我在查询结束时添加了一个“按年分组”,以确保获得的年份不重复。这是最后一个查询,如果您想知道选择*从weather w Internal JOIN选择MAXHiTemp MaxTemp,SUBSTRDate,-2年从weather GROUP BY Year t中选择t.MaxTemp=w.HiTemp和t.Year=SUBSTRw.Date,-2 GROUP BY SUBSTRDate,-2完美!除了最后一个子串别名。但这并不重要。我在查询结束时添加了一个“按年分组”,以确保获得的年份不重复。这是最后一个查询,如果您想知道从weather w内部连接选择*选择MAXHiTemp MaxTemp,SUBSTRDate,-2年从weather GROUP BY Year t中选择。MaxTemp=w.HiTemp和t.Year=SUBSTRw.Date,-2 GROUP BY SUBSTRDate,-2