2017-06-12 76 views
0

我的目標是選擇具有最高createdAt的列,由用戶分組。學說/ SQL查詢MAX與GroupBy

如果我做到以下幾點:

$qb = $this->createQueryBuilder('qb1'); 
$q = $qb 
    ->select('pbs, MAX(pbs.createdAt) AS HIDDEN pbs_created') 
    ->add('from', 'MyEntity pbs') 
    ->groupBy('pbs.user') 
    ->orderBy('pbs_created', 'ASC') 
    ->getQuery(); 
return $q->getResult(); 

我得到:

+------+---------------------+---------------------+--------------+ 
| id_0 | createdAt_3   | sclr_5    | project_id_7 | 
+------+---------------------+---------------------+--------------+ 
| 2137 | 2014-10-07 10:52:29 | 2017-04-25 15:42:42 |   116 | 
+------+---------------------+---------------------+--------------+ 
+------+---------------------+---------------------+--------------+ 
| 5123 | 2015-11-02 15:02:55 | 2017-05-02 05:36:18 |   118 | 
+------+---------------------+---------------------+--------------+ 

的問題是,我得到的最大價值,但返回的行不包含最大的價值。

我怎樣才能得到最新createdAt分組由用戶與關聯的實體數據?

回答

0

您是否嘗試更改orderBy? 像這樣:

->orderBy('pbs_created', 'DESC') 
+0

是的。 orderBy只會在group by之後影響,所以它只會對您的「舊」或「不想要」條目進行排序。 – develth

1

它沒有任何待定。 MAX()給你最大值不是一行最大值

看看這些所謂的問題

問題是 - 使用Doctine的QueryBuilder這兩種解決方案都很難實現。 子查詢是可能的 - http://melikedev.com/2013/06/07/php-doctrine-dql-select-subquery/

+0

我已經想到了這樣的東西,並建立了一個本機查詢與你的建議解決方案(子選擇)。 – develth

+0

想知道爲什麼DQL無法處理子選擇。 – develth