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();
}
我正在尝试(但失败了)将此 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();
}