Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupa Laravel Eloquent według najnowszego rekordu

Aby uzyskać najnowszy rekord na klienta spośród dla każdego miasta na podstawie created_at możesz użyć samodzielnego dołączenia

DB::table('yourTable as t')
  ->select('t.*')
  ->leftJoin('yourTable as t1', function ($join) {
        $join->on('t.Customer','=','t1.Customer')
             ->where('t.City', '=', 't1.City')
             ->whereRaw(DB::raw('t.created_at < t1.created_at'));
   })
  ->whereNull('t1.id')
  ->get();

W zwykłym SQL byłoby to coś w stylu

select t.*
from yourTable t
left join yourTable t1
on t.Customer = t1.Customer
and t.City = t1.City
and t.created_at < t1.created_at
where t1.id is null

Demo

Innym podejściem z wewnętrznym sprzężeniem własnym byłoby

select t.*
from yourTable t
join (
    select  Customer,City,max(ID) ID
    from yourTable
    group by Customer,City
) t1
on t.Customer = t1.Customer
and t.City = t1.City
and t.ID = t1.ID

Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyszukiwać dane JSON w MySQL?

  2. Jak zmienić wielkość liter w nazwie bazy danych w MySQL?

  3. Najlepsze praktyki z danymi historycznymi w bazie danych MySQL

  4. MySQL:wstaw wartości z innej tabeli do jednej kolumny

  5. Lista ograniczeń z bazy danych MySQL