繁体   English   中英

JPQL每组最大n查询

[英]JPQL greatest-n-per-group query

有没有一种方法可以使用JPQL编写此查询:

select *
from "tbCita" c inner join "tbAccionCita" ac1
on c."citaId" = ac1."citaId"
left outer join "tbAccionCita" ac2 on ( c."citaId" = ac2."citaId" and
    (ac1."fechaAccionCita" < ac2."fechaAccionCita" 
     or ac1."fechaAccionCita" = ac1."fechaAccionCita" 
     and ac1."accionCitaId" < ac2."accionCitaId")
 )
 inner join "tbUsuarioCita" uc 
    on c."citaId" = uc."citaId"
  inner join "tbUser" u 
    on uc."userId" = u."userId"
 where 
    ac2."accionCitaId" is null
    and u."userId" = 1

fechaAccionCita是一个日期:)

我正在尝试为userId = 1的所有约会(tbCita)获取最新状态(一个约会具有多个状态)。

该查询工作正常,但是在JPQL中,它给了我以下错误:

从句引用了两个不同的从句元素

这里查询:

SELECT c "
        + "FROM Cita c "
        + "INNER JOIN c.usuarioCita u "
        + "INNER JOIN FETCH c.accionCita a "
        + "LEFT OUTER JOIN c.accionCita a2 on (a.fechaAccionCita < a2.fechaAccionCita or "
        + "a.fechaAccionCita = a2.fechaAccionCita and a.accionCitaId < a2.accionCitaId) "

请问以下工作吗? 另外,您确定OR语句中的逻辑按预期工作吗? 似乎您可能需要附加一组括号。

select c
from tbCita c, tbAccionCita ac1, tbUsuarioCita uc, tbUser u 
left join tbAccionCita ac2 on (
    c.citaId = ac2.citaId 
    and (ac1.fechaAccionCita < ac2.fechaAccionCita 
        or ac1.fechaAccionCita = ac1.fechaAccionCita 
        and ac1.accionCitaId < ac2.accionCitaId))
where c.citaId = ac1.citaId
    and c.citaId = uc.citaId
    and uc.userId = u.userId
    and ac2.accionCitaId is null
    and u.userId = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM