Laravel 拉威尔5.6。为每个唯一列键获取第一个唯一行(desc和example更简洁)

Laravel 拉威尔5.6。为每个唯一列键获取第一个唯一行(desc和example更简洁),laravel,postgresql,laravel-eloquent,laravel-5.6,Laravel,Postgresql,Laravel Eloquent,Laravel 5.6,我有这样一个表格简化版,用于记录订单的历史记录: 订单id不唯一|已创建|在|消息 它包含这样的记录 1 | 2018-03-01 | Message #1 2 | 2018-03-02 | Message #2 2 | 2018-03-03 | Message #3 1 | 2018-03-04 | Message #4 我应该如何查询我的OrderAttempt模型,以便为每个订单id接收一条唯一的记录 如果需要,我准备提供更好的解释/更多细节。试试以下方法: $join = OrderA

我有这样一个表格简化版,用于记录订单的历史记录:

订单id不唯一|已创建|在|消息

它包含这样的记录

1 | 2018-03-01 | Message #1
2 | 2018-03-02 | Message #2
2 | 2018-03-03 | Message #3
1 | 2018-03-04 | Message #4
我应该如何查询我的OrderAttempt模型,以便为每个订单id接收一条唯一的记录

如果需要,我准备提供更好的解释/更多细节。

试试以下方法:

$join = OrderAttempt::select('order_id')->selectRaw('MAX(created_at) created_at')  
    ->groupBy('order_id');
$sql = '(' . $join->toSql() . ') latest';
OrderAttempt::join(DB::raw($sql), function($join) {
    $join->on('order_attempts.order_id', 'latest.order_id')
        ->on('order_attempts.created_at', 'latest.created_at');
})->get();

我已经通过max id查询与我的客户解决了这个问题。目前它可以正常工作并满足他的需要。

您想要每个订单id的最新创建日期的记录?我想要每个订单id的最新创建日期的记录。每个订单id的最新创建日期的记录?@JonasStaudenmeir是的。一个订单id可以有多个相同日期的记录吗?Staudenmeir As据我所知,您的想法是选择具有max created_at的行,并将其视为ID。对吗?不幸的是,它不是SQLSTATE[42P01]:未定义的表:7错误:缺少表order_truments_log行1的子句条目:…order_truments_log group by order_ID最新的order_att…^SQL:select*from order\u trunt\u log内部连接select order\u id,MAXcreated\u at created\u at from order\u trunt\u log group by order\u id latest on order\u trunts\u log.order\u id=latest.order\u id和order\u trunts\u log.created\u at=latest.created\u atAlso\u,您是否考虑过,每个order\u id created\u是唯一的,但在整个系统中并非如此。下面是SQL实现,它可以工作:摘要为SELECT order\u trunt\u log.id、order\u trunt\u log.order\u id、order\u trunt\u log.created\u at,行号按订单超额分配\u尝试\u日志。订单\u id按订单\u尝试\u日志。创建\u在DESC AS rk从订单\u尝试\u日志中选择s.*从摘要s中,其中s.rk=1请替换->获取->toSql并发布结果。虽然此代码可能会回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。
$join = OrderAttempt::select('order_id')->selectRaw('MAX(created_at) created_at')  
    ->groupBy('order_id');
$sql = '(' . $join->toSql() . ') latest';
OrderAttempt::join(DB::raw($sql), function($join) {
    $join->on('order_attempts.order_id', 'latest.order_id')
        ->on('order_attempts.created_at', 'latest.created_at');
})->get();
$orders = OrderAttempt::select('order_id', 'created_at', 'message')->groupBy('order_id')-> sortBy('created_at', 'DESC')->get();