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

如何使用Laravel Eloquent实现按天分组查询每日最新值

原SQL转Laravel Eloquent实现方法

基础对应写法(完全匹配原SQL逻辑)

前提是你已经创建了对应forex表的Eloquent模型Forex,且引入了DB门面:

use Illuminate\Support\Facades\DB;

$dailyRecords = Forex::select(DB::raw('MAX(timestamp) as max_timestamp, value'))
    ->groupBy(DB::raw("FROM_UNIXTIME(timestamp, '%Y%m%d')"))
    ->get();

更稳妥的兼容写法

原SQL在开启MySQL默认的ONLY_FULL_GROUP_BY模式时会抛出语法错误,因为value字段既没有出现在GROUP BY子句中,也没有被聚合函数包裹,推荐使用子查询关联的方式实现,结果更准确、兼容性更强:

use Illuminate\Support\Facades\DB;

// 子查询获取每天最大的时间戳
$dailyMaxTimestampSub = Forex::select(DB::raw('MAX(timestamp) as max_timestamp'))
    ->groupBy(DB::raw("FROM_UNIXTIME(timestamp, '%Y%m%d')"));

// 关联原表拿到对应时间戳的完整记录
$dailyRecords = Forex::joinSub($dailyMaxTimestampSub, 'daily_max', function ($join) {
    $join->on('forex.timestamp', '=', 'daily_max.max_timestamp');
})->get(['forex.timestamp', 'forex.value']);

注意事项

  • 以上写法针对MySQL数据库,如果使用其他数据库请替换FROM_UNIXTIME为对应数据库的时间戳转日期函数
  • Laravel 8及以上版本模型默认命名空间为App\Models\Forex,低版本为App\Forex,请根据自己的项目版本调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:24:04