Necesito consultar para encontrar un registro con la fecha más reciente de un grupo de registros. He intentado un montón de cosas, con el más reciente es algo como esto:JPQL Consulta utilizando max en un campo de fecha
select msg, msg.createdDate from ImportedMessage msg where msg.siteId = ?1 and msg.createdDate = max(msg.createdDate) group by msg.createdDate
Por desgracia, todo lo que he probado ha producido algún tipo de error. El error que parecen llegar más es:
Caused by: java.sql.SQLException: Not in aggregate function or group by clause: [email protected] in statement [select importedme0_.IMPORTED_MSG_ID as col_0_0_, importedme0_.CREATED_DATE as col_1_0_, max(importedme0_.CREATED_DATE) as col_2_0_, importedme0_.IMPORTED_MSG_ID as IMPORTED1_1_, importedme0_.CREATED_BY as CREATED2_1_, importedme0_.CREATED_DATE as CREATED3_1_, importedme0_.UPDATED_BY as UPDATED4_1_, importedme0_.UPDATED_DATE as UPDATED5_1_, importedme0_.IMPORT_TYPE as IMPORT6_1_, importedme0_.MESSAGE as MESSAGE1_, importedme0_.PROCESSED_FLAG as PROCESSED8_1_, importedme0_.SITE_ID as SITE9_1_ from IMPORTED_MSG importedme0_ where importedme0_.SITE_ID=? and importedme0_.CREATED_DATE=max(importedme0_.CREATED_DATE) group by importedme0_.CREATED_DATE] at org.hsqldb.jdbc.Util.throwError(Unknown Source) at org.hsqldb.jdbc.jdbcPreparedStatement.(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534) at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452) at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1616) at org.hibernate.loader.Loader.doQuery(Loader.java:717) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) at org.hibernate.loader.Loader.doList(Loader.java:2449) ... 52 more
Creo que lo que esto me está diciendo es que no tengo las cosas apropiadas en mi cláusula select para permitir que el grupo de trabajo. Sin embargo, he intentado todo tipo de combinaciones, y todo conduce a este error.
¿Puede alguien darme una pista de lo que estoy haciendo mal aquí?
¿Cómo funciona realmente el setMaxResults (1) en J? ¿PENSILVANIA? ¿Está ordenando a la base de datos que devuelva solo una fila, u obtenga todas las filas de la base de datos de acuerdo con la consulta, y luego devuelva solo una fila? – Wudong
cómo funciona exactamente setMaxResults (1) depende de la implementación de JPA y las capacidades del controlador jdbc. En OpenJPA en MS-SQL esto se traduce en SELECCIONAR TOP 1 en la consulta SQL subyacente. – Armand