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

Laravel中使用where条件查询含temperature字段最小/最大值的全量行数据

正确实现方案

方法1:子查询一次性查询(推荐,仅执行1次SQL)

直接在where条件中嵌套最小值查询,一次返回所有符合条件的完整行:

// 拆分写法逻辑更清晰,实际仅执行2次简单查询,性能开销极低
$minTemperature = rawData::whereDate('acktime', $thisDay)->min('temperature');
$rows = rawData::whereDate('acktime', $thisDay)
    ->where('temperature', $minTemperature)
    ->get();

如果要完全合并为单次查询,可以用闭包写嵌套子查询:

$rows = rawData::whereDate('acktime', $thisDay)
    ->where('temperature', function ($query) use ($thisDay) {
        $query->from('raw_datas') // 此处替换为你的实际表名
              ->whereDate('acktime', $thisDay)
              ->selectRaw('min(temperature)');
    })->get();

方法2:集合过滤(适合单日数据量较小的场景)

如果单日数据量在千级以内,可以先查询当日所有数据,再用集合方法筛选最小值对应的行:

$allDayRows = rawData::whereDate('acktime', $thisDay)->get();
$minTemperature = $allDayRows->min('temperature');
$rows = $allDayRows->where('temperature', $minTemperature);

之前写法的问题说明

  • 第一种/第二种写法:min()是聚合方法,调用后会直接返回温度的数值结果,不会返回行集合
  • 第三种写法:get('acktime')仅查询了acktime字段,结果集中不存在temperature字段,所以取min返回null
  • 第四种写法:min('temperature')执行后已经返回浮点型的最小值数值,后续再调用get()方法会抛出类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:07