2012-10-08 13 views
8

Ich bin eine Versionskontrolle Domain-Klasse in Grails erstellen:Finden Maximalwert in Tabellenspalte

class VersionControl { 

    Date dateCreated 
    Long versionNumber 

    Long getLatestVersionNumber() { 
     //return largest versionNumber 
    } 

} 

Ich möchte eine Abfrage hinzufügen, um die größte Versionsnummer erhalten gespeichert:

Long getLatestVersionNumber() 

In SQL würde diese Abfrage mehr oder weniger wie folgt aussehen:

SELECT TOP 1 MAX(versionNumber) FROM VersionControl 

Die Funktion MUSS den Wert als lon zurückgeben G.

Was ist der richtige Weg, dies in Grails zu tun?

Antwort

28

Sie GORM criteria verwenden können, mit Projektionen Abfrage:

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

Vielen Dank, diese Antwort hat perfekt funktioniert . – Chopo87

+0

scheint es von Controller zu sein. Könnten Sie ein Beispiel für Ihre Ansicht geben? –

0

VersionControl.find ("von VersionControl vc max (vc.versionNumber)")

+0

Grails 2.1.0 scheint nicht die Aufnahme von MAX innerhalb der Abfrage zu suchen: unerwartetes Token: Max in Zeile 1, Spalte 39 [von VersionControl vc max (vc.versionNumber)] – Chopo87

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

Dies ist für mich leichter zu verstehen .

0

Um max in einer Abfrage zu berechnen, ich denke, das Beste, was die Kriterien Option ist:

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

} 

, wenn Sie einen groupby Modifikator hinzufügen möchten, nur eine neue Zeile in Projektionen Schließung hinzufügen wie folgt:

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

}