按每组的updated_at排序

时间:2016-05-09 09:50:49

标签: laravel group-by sql-order-by query-builder

我有以下简单查询来尝试获取每module的最后更新行:

    $distincts = SerialNumber::where('company_id', Auth::user()->active_company_id)
        ->groupBy('module')
        ->orderBy('updated_at', 'desc')
        ->get();

这并不像我想要的那样工作。 module组中的每一行都不会按updated_at排序(这是一个日期时间戳)。

如何为组中的每一行使用orderBy?谢谢你的阅读!

以下是有效的,但这是一个非常糟糕的解决方案:

    $distincts = array();

    $modules = SerialNumber::select('module')
        ->where('company_id', Auth::user()->active_company_id)
        ->groupBy('module')
        ->pluck('module');

    foreach ($modules as $mod) {
        $se = SerialNumber::where('company_id', Auth::user()->active_company_id)
            ->where('module', $mod)
            ->orderBy('updated_at', 'desc')
            ->first();

        $distincts[] = $se;
    }

1 个答案:

答案 0 :(得分:1)

您需要的是子查询:

read.csv(file)

这使您只获得组中的最新记录。