2012-10-08 30 views
8

tworzę klasę domeny kontroli wersji w Grails:Znajdź wartość max w kolumnie tabeli

class VersionControl { 

    Date dateCreated 
    Long versionNumber 

    Long getLatestVersionNumber() { 
     //return largest versionNumber 
    } 

} 

Chciałbym dodać kwerendy, aby uzyskać największą liczbę wersji zapisanej w pamięci:

Long getLatestVersionNumber() 

W SQL to zapytanie będzie wyglądało mniej więcej tak:

SELECT TOP 1 MAX(versionNumber) FROM VersionControl 

Funkcja MUSI zwrócić wartość jako lon sol.

Jaki jest właściwy sposób na to w Grails?

Odpowiedz

28

Można wykorzystać GORM criteria, odpytywanie z prognozami:

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

Dziękuję, ta odpowiedź działała idealnie . – Chopo87

+0

wydaje się być z kontrolera. czy mógłbyś podać przykład swojego widoku? –

0

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

+0

Grails 2.1.0 nie lubi włączenia MAX do zapytania wyszukiwania: nieoczekiwany token: maksimum w pobliżu wiersza 1, kolumna 39 [z VersionControl vc max (vc.versionNumber)] – Chopo87

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

Jest mi łatwiej zrozumieć .

0

Aby obliczyć max w zapytaniu, myślę, że najlepiej jest opcja kryteria:

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

} 

jeśli chcesz dodać modyfikator GroupBy, wystarczy dodać nową linię w zamknięciu projekcji tak:

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

} 
Powiązane problemy