Laravel Datatables获取查询的第一行

时间:2016-08-24 09:38:55

标签: laravel datatables laravel-5.2

我正在使用yajra的laravel / datatables插件,我想只发送根据记录降序日期排序的查询中每个组的第一行。这是我的问题:

$qsrecords = QualityScore::where('clientID', '=', $user['id'])
       ->whereBetween('day', array($startDate, $endDate))
       ->where($desiredValue, $operator, $quantity)
       ->where('previousQualityScore','!=','0');

此查询返回此给定用户ID的每条记录,如:

Client ID | Keyword ID | Quality Score |     Date
   2           81            8            21.08.2016
   2           42            9            19.08.2016
   2           81            7            16.08.2016
   2           42            5            14.08.2016

正如你所看到的,我有两个不同的关键字,我的查询给出了输出。

但我希望我的查询生成如下结果:

Client ID | Keyword ID | Quality Score |     Date
   2           81            8            21.08.2016
   2           42            9            19.08.2016

只显示每个关键字的最后一条记录。这是我想要实现的目标。

我发送查询的方式:

    // Send data to view via datatables plugin
    return Datatables::of($qsrecords)->make(true);

1 个答案:

答案 0 :(得分:0)

最后我发现了它!我已经改变了解决这个问题的方法,但是下面的代码已经解决了这个问题,感谢@ Kiran-sadvilkar的建议。

$groupByMaxDateQuery = ' SELECT qs.adGroup,qs.keyword, qs.previousQualityScore, qs.qualityScore, qs.qualityScoreDifference, qs.day 
                FROM homestead.qualityScore AS qs
                INNER JOIN (
                    SELECT adGroupID, keywordID, max(day) 
                    AS MaxDay 
                    FROM homestead.qualityScore 
                    GROUP BY adGroupID,keywordID
                )
                innerTable ON qs.adGroupID = innerTable.adGroupID 
                    AND qs.keywordID = innerTable.keywordID 
                    AND qs.day = innerTable.MaxDay
                WHERE qs.clientID = '.$user['id'].' AND 
                    qs.day BETWEEN "'.$startDate.'" AND "'.$endDate.'" AND 
                    qs.'.$desiredValue.' '.$operator.' '.$quantity.' AND 
                    qs.previousQualityScore != 0
                ';

    // Pull data from database with current conditions
    $qsrecords = DB::table(DB::raw("($groupByMaxDateQuery) as qs"));

结果我决定使用原始的SQL查询,现在它可以工作......