Laravel Eloquent seleziona tutte le righe con max created_at

Ho una tabella che contiene:

id seller_id amount created_at 1 10 100 2017-06-01 00:00:00 2 15 250 2017-06-01 00:00:00 .... 154 10 10000 2017-12-24 00:00:00 255 15 25000 2017-12-24 00:00:00 

Voglio ottenere tutte le ultime righe per ogni singolo seller_id. Posso ottenere l’ultima riga per uno come questo:

 $sales = Snapshot::where('seller_id', '=', 15) ->orderBy('created_at', 'DESC') ->first(); 

Come posso ottenere solo l’ultima riga per ogni venditore?

Per ottenere l’ultimo record per ogni seller_id è ansible utilizzare la seguente query

 select s.* from snapshot s left join snapshot s1 on s.seller_id = s1.seller_id and s.created_at < s1.created_at where s1.seller_id is null 

Usando il generatore di query è ansible riscriverlo come

 DB::table('snapshot as s') ->select('s.*') ->leftJoin('snapshot as s1', function ($join) { $join->on('s.seller_id', '=', 's1.seller_id') ->whereRaw(DB::raw('s.created_at < s1.created_at')); }) ->whereNull('s1.seller_id') ->get(); 

Questo ha funzionato:

 DB::table('snapshot as s') ->select('s.*') ->leftJoin('snapshot as s1', function ($join) { $join->on('s.seller_id', '=', 's1.seller_id'); $join->on('s.created_at', '<', 's1.created_at'); }) ->whereNull('s1.seller_id') ->get();