MySQL查找给定字段的最大值并返回整行 介绍
嗨, 我有一个气象站,每半小时记录一次当前天气。 在其他传感器中,它有一个温度计。这是这次调查的主题。 我已经总结了表中的字段,但请注意HiTemp字段存储的是最高温度 情况 给定SQL查询中的以下表结构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 ); 请注意,
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