sql >> Database >  >> RDS >> Mysql

Laravel Welsprekende groep volgens meest recente record

Voor het laatste record per klant voor elke stad op basis van created_at je kunt een zelflidmaatschap gebruiken

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

In gewone SQL zou het zoiets zijn als

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

Een andere benadering met zelf inner join zou zijn

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. De schoonste manier om een ​​SQL-string in Java te bouwen

  2. Hoe om te gaan met een externe sleutel tijdens het partitioneren

  3. Hoe Substr() werkt in SQLite

  4. Afbeeldingsbestanden of URL's opslaan in de MySQL-database? Wat is beter?