0

基準を使用してこの SQL を取得したい

select A.evaluated_employee_id, A.created_date, A.total_grade
from employee_performance_assessment A
join
(  select evaluated_employee_id, max(created_date) as maxdate, status, total_grade
    from employee_performance_assessment
    group by evaluated_employee_id
) B on A.evaluated_employee_id = B.evaluated_employee_id and A.created_date = B.maxDate

私は次のことをしています

    DetachedCriteria dc = DetachedCriteria.forClass(EmployeePerformanceAssessmentBO.class);
    dc.createAlias("evaluatedEmployee", "e");
    dc.setProjection(Projections.projectionList().add(Projections.max("createdDate"))
.add(Projections.groupProperty("evaluatedEmployee")));
 dc.addOrder(Order.asc("e.lastName")).addOrder(Order.asc("createdDate"));                   
    dc.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    return getDAOHibernateTemplate().findByCriteria(dc);

しかし、これは WHERE 句内でサブクエリを生成します 同じテーブル (クラス) から 2 つの基準を結合する方法を考えていますか?

4

1 に答える 1

4

解決策にたどり着く。基本的に元のクエリを次のように変更しました。

select A.evaluated_employee_id, A.created_date, A.total_grade
from employee_performance_assessment A
where A.created_date = 
(  select max(created_date)
    from employee_performance_assessment
    where A.evaluated_employee_id = evaluated_employee_id 
    group by evaluated_employee_id
) 

したがって、サブクエリに参加する代わりに、where 句で created_date を比較します。そして、休止状態で同等のものは次のようになります。

DetachedCriteria dc = DetachedCriteria.forClass(EmployeePerformanceAssessmentBO.class, "performanceAssessment");
dc.createAlias("evaluatedEmployee", "e");

dc.addOrder(Order.asc("e.lastName")).addOrder(Order.asc("createdDate"));

if (assessmentsSearch.isOnlyLastAssessment()){
   DetachedCriteria dc2 = DetachedCriteria.forClass(EmployeePerformanceAssessmentBO.class, "performanceAssessmentSubQuery");
   dc2.setProjection(Projections.projectionList().add(Projections.max("createdDate")));
   dc2.add(Expression.eqProperty("performanceAssessment.evaluatedEmployee.id", "performanceAssessmentSubQuery.evaluatedEmployee.id"));

   dc.add(Subqueries.propertyEq("createdDate", dc2));
}

それが他の誰かに役立つことを願っています。

于 2013-10-11T18:00:19.957 に答える