php - Laravel queryBuilder,一种通过 group by 保持最新日期值的好方法
问题描述
我有一个像这样构建的 mysql 数据透视表。
id, person_id, objective_id, achieved_at(date)
每条记录都显示了一个人的目标,这意味着一个人可以在不同的日子里有相同的目标。我的目标是建立一个按人和目标分组的查询,但保留最近的成就记录。
当然,使用 GROUP BY person_id、objective_id 和 ORDER BY allowed_at 的简单查询是行不通的,所以我尝试了 Collection 的过滤方法。
变量 $results 包含 queryBuilder,现在我使用此代码,但我认为非常慢且效率低下。
$filtered = $results->filter(function ($row, $key)use($results) {
$latest = $results->where("person_id",$row->person_id)->where("objective_id",$row->objective_id)
->orderBy("achieved_at","DESC")
->first();
if( $row->id == $latest->id){
return $latest;
}
});
如何优化此方法?
解决方案
推荐阅读
- wordpress - WP_Query 传递一个唯一标识符以用于稍后的操作挂钩?
- python - 代码@discord bot 并让它回复你的前缀和等等等等
- material-design - Snowpack + Svelte + svelte-materialify 缺少图标
- python - 使用 pd.pivot 在 Python 中进行透视
- cassandra - 如何使用列中的 JSON 子对象从 Cassandra 中进行选择?
- sql - 没有预期的关键字 IF
- javascript - 将产品添加到购物车 jQuery/Ajax/Symfony/Twig
- python - DjangoREST - 如何让我的视图/序列化器在服务器上更高效?
- libreoffice-base - 可以在 libreoffice 基地复制记录吗
- xcode - SwiftUI:类型“计时器”没有成员“发布”