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

如何在Laravel 8中按产品代码汇总各最新日期的数值

Laravel 8 实现按产品分组取最新记录并求和

需求:对包含product_code、date、value字段的数据表,按product_code分组后筛选每组内date最新的记录,最终对这些记录的value字段求和(示例结果为60)。

方法一:查询构造器(Query Builder)实现

通过子查询先获取每个产品的最新日期,再关联原表筛选对应记录并求和:

$totalSum = DB::table('your_table_name as t1')
    ->join(
        DB::raw('(SELECT product_code, MAX(date) as max_date FROM your_table_name GROUP BY product_code) as t2'),
        function ($join) {
            $join->on('t1.product_code', '=', 't2.product_code')
                 ->on('t1.date', '=', 't2.max_date');
        }
    )
    ->sum('t1.value');
  • 替换your_table_name为你的实际数据表名
  • 该逻辑先通过分组查询得到每个product_code对应的最新日期,再通过关联匹配出对应记录,最后直接求和,性能高效且逻辑清晰。

方法二:Eloquent模型实现(若有对应模型)

假设你的模型为ProductRecord(对应数据表product_records),可以用joinSub方法实现:

use App\Models\ProductRecord;

$totalSum = ProductRecord::query()
    ->joinSub(
        ProductRecord::select('product_code', DB::raw('MAX(date) as max_date'))
            ->groupBy('product_code'),
        'latest_dates',
        function ($join) {
            $join->on('product_records.product_code', '=', 'latest_dates.product_code')
                 ->on('product_records.date', '=', 'latest_dates.max_date');
        }
    )
    ->sum('product_records.value');

结果验证

上述两种方法最终都会返回示例中的求和结果60,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:25:52