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

MySQL查询指定日期区间内各邮编的最低温度对应日期

解决每个邮编对应最低温度及日期的SQL问题

原SQL的问题

你原来的语句错误在于:按postcode分组后,直接选择date字段时,数据库无法确定返回该分组下哪一条记录的日期(部分SQL模式会直接报错,允许的模式也可能返回随机日期),导致日期和最低温度不匹配。

两种高效解决方案

方案1:窗口函数(推荐)

利用ROW_NUMBER()窗口函数给每个邮编的记录按温度升序编号,取编号为1的记录就是最低温度对应的那条:

SELECT postcode, temperature, `date`
FROM (
    SELECT 
        postcode, 
        temperature, 
        `date`,
        ROW_NUMBER() OVER (PARTITION BY postcode ORDER BY temperature ASC) AS rn
    FROM temperatures
    WHERE `date` BETWEEN '2022-02-01' AND '2022-02-02'
) t
WHERE rn = 1;

如果同一邮编在日期区间内有多个相同的最低温度,想要保留所有对应日期,把ROW_NUMBER()换成RANK()即可。

方案2:子查询关联

先计算每个邮编的最低温度,再关联原表找到对应日期:

SELECT t.postcode, t.temperature, t.`date`
FROM temperatures t
JOIN (
    SELECT postcode, MIN(temperature) AS min_temp
    FROM temperatures
    WHERE `date` BETWEEN '2022-02-01' AND '2022-02-02'
    GROUP BY postcode
) m ON t.postcode = m.postcode AND t.temperature = m.min_temp
WHERE t.`date` BETWEEN '2022-02-01' AND '2022-02-02';

关于游标的疑问

完全不需要用游标,游标适合复杂的逐行逻辑处理,这类聚合关联场景用标准SQL写法更简洁高效,性能也更好。

内容的提问来源于stack exchange,提问作者martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:04