Eloquent通过分组找到具有最大值的行

时间:2016-12-06 09:31:39

标签: mysql laravel orm eloquent aggregate-functions

嗨我有问题和解决方案http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html,这是找到某个列的最大值的行,按其他值分组。

我的问题是如何将下面的查询转换为Eloquent格式?

protected override void OnCreate(Bundle b)
{
    base.OnCreate(b);
    // create event handler 
    var calendar = FindViewById<CalendarView>(Resource.Id.myCalender);
    calendar.DateChange += CalendarOnDateChange;
}

感谢。

3 个答案:

答案 0 :(得分:2)

使用raw Builder,如果使用eloquent只需删除表名并替换为模型实例,则可以使用下面的

DB::table(DB::raw('shop as s1'))
   ->join(
       DB::raw('(SELECT article, MAX(price) AS price FROM shop GROUP BY article) as s2'), 
     function($query) {
       $query->on('s1.article', '=', 's2.article')
             ->on('s1.price', '=', 's2.price');
     })->get();

答案 1 :(得分:0)

您可以使用直截了当的DB::query()。您也可以从Queries - Joins获取帮助以应用联接或Raw Expressions

答案 2 :(得分:0)

试试这个:

Shop::join('shop as shop2', 'shop.article', '=', 'shop2.article')
        ->groupBy('shop.article', 'shop.price')
        ->havingRaw('max(shop2.price) = shop.price')
        ->get()