我无法在我拥有的symfony2项目中获得此查询。
我的表: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 BY对行进行排序,但它会继续返回找到的第一行:
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();
}
感谢您的帮助。
答案 0 :(得分:1)
我终于通过以下查询解决了问题:
public function findOldEstudent()
{
return $this->getEntityManager()->createQuery(
'SELECT c FROM BackendBundle:case_file c INNER JOIN c.student s WHERE c.academic_year IN (select MAX(ca.academic_year) FROM BackendBundle:case_file ca INNER JOIN ca.student st GROUP BY st.id) and s.active=0')
->getResult();
}
我遇到的问题是我在子选择中使用了相同的别名,因为它发生在另一个类似的情况here中,我不记得了。
希望有所帮助。