Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obter a linha mais recente com group by e Laravel


O problema é que o conjunto de resultados será primeiro agrupado então pedido . Você pode usar a seleção aninhada para obter o que deseja.

Consulta SQL:
SELECT t.* FROM (SELECT * FROM messages ORDER BY created_at DESC) t GROUP BY t.from

Com Laravel:
$messages = Message::select(DB::raw('t.*'))
            ->from(DB::raw('(SELECT * FROM messages ORDER BY created_at DESC) t'))
            ->groupBy('t.from')
            ->get();

Você só precisa adicionar seu where() cláusulas.