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 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();
}
私はあなたの助けに感謝します。
すべてを選択した後のソート順ですが、それ以外の方法ではできません。 – Linkan
@Linkanありがとうございます、私は理解していますが、その解決方法を知っていますか?私は各生徒の最初の行が見つかるまで降順で検索する必要があります。これはその場合に記録された最後の行です。 – Joseph
行く方法はSELECT id_student、MAX(Academic_year)AS Academic_year FROM tablename GROUP BY id_studentその後、id_studentと学年の最後のコースに参加します。 – Linkan