0
我無法在我有的symfony2項目中得到這個查詢。如何在DQL中使用GROUP BY獲取每個組中的最新記錄?
我表:Case_file
id id_student last_course Academic_year
---|----------|------------|--------------
1 | 1 | 1º Primary | 2014/2015
2 | 2 | 2º Primary | 2014/2015
5 | 3 | 1º Primary | 2014/2015
3 | 1 | 2º Primary | 2015/2016
4 | 2 | 3º Primary | 2015/2016
我需要得到每個學生,我已按學年的最後一個記錄。
用下面的查詢我獲得被發現每個學生的第一行:
public function findOldEstudent()
{
return $this->getEntityManager()->createQuery(
'SELECT c FROM BackendBundle:case_file c INNER JOIN c.student s WHERE s.active=0 GROUP BY s.id ')
->getResult();
}
誰的解決方案,我展示如下表所示:
id id_student last_course Academic_year
---|----------|------------|--------------
1 | 1 | 1º Primary | 2014/2015 *
2 | 2 | 2º Primary | 2014/2015 *
3 | 3 | 1º Primary | 2014/2015
而且我要的是得到如下表所示:
id id_student last_course Academic_year
---|----------|------------|--------------
1 | 1 | 2º Primary | 2015/2016 *
2 | 2 | 3º Primary | 2015/2016 *
3 | 3 | 1º Primary | 2014/2015
爲此,我曾試圖與ORDER行按下列查詢排序,但它仍然返回找到的第一行:
public function findOldEstudent()
{
return $this->getEntityManager()->createQuery(
'SELECT c FROM BackendBundle:case_file c INNER JOIN c.student s WHERE s.active=0 GROUP BY s.id ORDER BY c.academic_year DESC')
->getResult();
}
我感謝你的幫助。
選擇所有內容後按順序排列順序,而不是按照您的意願順序排列。 – Linkan
感謝@Linkan,我明白,但您是否知道如何獲得該解決方案?我需要能夠以降序搜索,直到找到每個學生的第一行,這將是該案例中記錄的最後一行。 – Joseph
要走的路是SELECT id_student,MAX(Academic_year)AS Academic_year FROM表名GROUP BY id_student在加入id_student和學年的最後課程之後。 – Linkan