You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:03:13