【发布时间】:2018-06-26 09:55:03
【问题描述】:
我有一个 Laravel 应用程序,并且我有一个应该按如下方式运行的查询。
company date period
apple | 2017-08-23 | live
apple | 2017-09-04 | live
apple | 2014-03-04 | history
enron | 1987-09-09 | history
tesla | 2017-07-04 | live
tesla | 2017-06-03 | live
它需要按日期降序对每个公司的条目进行排序,条件是 period='live',从而返回每个公司的最后一个“live”条目。在上面的例子中,这应该返回
company date
apple | 2017-09-04
tesla | 2017-07-04
我已尝试使用查询生成器来完成此操作,例如:
return $query->where('period', '=', 'live')
->groupBy('company')
->orderBy('date','desc');
但是,这首先对结果进行分组,然后对它们进行排序,这会产生不可预测的结果。根据这个问题/答案,答案在于子查询:
ORDER BY date and time BEFORE GROUP BY name in mysql
但是,我无法将这种方法整合到我的问题中。您能否向我解释如何有效地解决这个问题,无论是使用子查询还是使用不同的方法,但不使用原始查询?
【问题讨论】:
-
我想这就是你要找的东西:laravel.com/api/5.5/Illuminate/Database/Query/…
-
@ThomasMoors 抱歉,我完全不懂语法。请详细回答一下好吗?
-
您只想选择
company, MAX(date)按company分组。您不需要对结果进行排序,除非您希望对结果组进行排序。
标签: php mysql laravel eloquent laravel-eloquent