Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Grup Laravel Eloquent menurut rekaman terbaru

Untuk mendapatkan catatan terbaru per pelanggan di antara untuk setiap kota berdasarkan created_at Anda dapat menggunakan self join

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();

Dalam SQL biasa itu akan menjadi seperti

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

Pendekatan lain dengan self inner join adalah

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. Mengganti \r\n dengan PHP

  2. MySQL menambahkan bidang ke Enum

  3. Kinerja MySQL:MySQL vs. MariaDB

  4. Berapa kisaran maksimum varchar di MySQL?

  5. Kesalahan Migrasi Laravel:Kesalahan sintaks atau pelanggaran akses:1071 Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 767 byte