我正在使用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);
答案 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查询,现在它可以工作......