MySQL如何查询当年最高温度及对应记录?
解决2023年最高温度及对应日期的查询问题
你的SQL核心问题是主查询未限定2023年的时间范围:子查询确实算出了2023年的最高温度,但主查询会遍历全表,返回所有年份中温度等于该值的记录,哪怕这些记录不属于2023年。
以下是几种可靠的修正方案:
方案一:给主查询添加时间过滤(最直观)
直接在主查询中加入2023年的时间条件,确保只返回当年的记录:
SELECT timestamp, temperature AS max_temp FROM table WHERE timestamp >= '2023-01-01' AND timestamp < '2024-01-01' -- 兼容带时分秒的timestamp,避免遗漏年末最后一天的记录 AND temperature = ( SELECT max(temperature) FROM table WHERE timestamp >= '2023-01-01' AND timestamp < '2024-01-01' );
方案二:用窗口函数(高效且支持多同温记录)
通过窗口函数一次扫描表即可完成计算,适合数据量较大的场景,同时能返回所有达到最高温度的记录:
SELECT timestamp, temperature AS max_temp FROM ( SELECT timestamp, temperature, -- RANK()会保留所有同最高温的记录,若只需一条可替换为ROW_NUMBER() RANK() OVER (ORDER BY temperature DESC) AS temp_rank FROM table WHERE timestamp >= '2023-01-01' AND timestamp < '2024-01-01' ) ranked_data WHERE temp_rank = 1;
方案三:ORDER BY + LIMIT(适合仅需单条记录)
如果不需要所有同最高温的记录,只需要其中一条,这种写法最简洁:
SELECT timestamp, temperature AS max_temp FROM table WHERE timestamp >= '2023-01-01' AND timestamp < '2024-01-01' ORDER BY temperature DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

