Doctrine 查询语言每组最新行

Doctrine Query Language Latest Row Per Group

我正在尝试(但失败了)将此 SQL 语句转换为使用 Doctrine QB。我正在尝试从 table 'orders'.

获取每个客户的所有最新订单记录
SELECT t1.* FROM order t1
  JOIN (SELECT id, MAX(timestamp) timestamp FROM order GROUP BY customer) t2
    ON t1.timestamp = t2.timestamp;

我已经尝试了几乎所有在这里找到的相关解决方案,最接近的是

$qb->join('App\Entity\Order', 'b', 'WITH', 'ro.date> b.date')

然而,它似乎对前 2 个结果有效,以下结果似乎只是抓住任何东西。请注意,我正在使用查询生成器,因为我有很多条件语句来添加“andWhere”和“orWhere”等。

这应该会让您得到想要的结果

public function selectLastOrdersPerCustomer(){
    return $this->createQueryBuilder('o')
        ->leftJoin(Order::class, 'o2', 'WITH', 'o2.customer = o.customer AND o.timestamp < o2.timestamp')
        ->where( 'o2.timestamp IS NULL' )
        ->innerJoin('o.customer', 'c')
        ->addSelect('c')
        ->groupBy('c.id')
        ->orderBy('o.timestamp', 'DESC')
        ->getQuery()
        ->getResult();
}