2012-10-08 27 views
8

Estoy creando una clase de dominio de control de versiones en Grails:Encontrar el valor máximo en la columna de la tabla

class VersionControl { 

    Date dateCreated 
    Long versionNumber 

    Long getLatestVersionNumber() { 
     //return largest versionNumber 
    } 

} 

Me gustaría añadir una consulta para obtener el mayor número de versión almacenada:

Long getLatestVersionNumber() 

En SQL esta consulta se vería más o menos de la siguiente manera:

SELECT TOP 1 MAX(versionNumber) FROM VersionControl 

La función DEBE devolver el valor como un lon gramo.

¿Cuál es la forma correcta de hacer esto en Grails?

Respuesta

28

Puede utilizar GORM criteria, consultar con las proyecciones:

VersionControl.createCriteria().get { 
    projections { 
     max "versionNumber" 
    } 
} as Long 
+0

Gracias, esta respuesta funcionó a la perfección . – Chopo87

+0

parece ser del controlador. podrías dar un ejemplo de tu vista? –

0

VersionControl.find ("de VersionControl VC max (vc.versionNumber)")

+0

Grails 2.1.0 no parece gustarle la inclusión de MAX dentro de la consulta de búsqueda: token inesperado: máximo cerca de la línea 1, columna 39 [de VersionControl vc max (vc.versionNumber)] – Chopo87

4
VersionControl.executeQuery("select max(versionNumber) from VersionControl") 

Esto es más fácil de entender para mí .

0

Para calcular máximo en una consulta, creo que la mejor es la opción criterios:

def maxVersion = VersionControl.withCriteria { 
    projections{ 
     max 'versionNumber' 
    } 

} 

si desea añadir un modificador GroupBy, sólo tiene que añadir una nueva línea en el cierre de las proyecciones de este modo:

VersionControl.withCriteria { 
    projections{ 
     avg 'score' 
     groupProperty 'channelId' 
    } 

} 
Cuestiones relacionadas