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
简介
嗨,
我有一个气象站,每半小时记录一次当前天气。
在其他传感器中,它有一个温度计。这是本次查询的主题。
我已经总结了我的 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