2

ここSOや他の場所でこの質問に対する多くの回答を見てきましたが、追跡できるのは、人々が最高のID、最大dateCreated、または最新のdbエントリを見つけたいだけの場合ですが、私がやりたいのは取得です別の基準にも一致する、作成された最新のオブジェクト。私のドメイン クラスには次のプロパティがあります: idnumbercompanytypedateCreatedおよびcontentcompanyプロパティは「OYG」または「BAW」にのみ設定でき、プロパティnumberは自動インクリメント int です。私がやりたいことnumberは、companyプロパティが「OYG」または「BAW」に設定されている最高のレコードを取得することです。

次に例を示します。

+----------------------------------------------------------+
| id |  number | company |   type  | dateCreated | content |
+----------------------------------------------------------+
|  1 |    0    |   OYG   | TsAndCs |  15/09/2016 |  stuff  |
|  2 |    0    |   BAW   | TsAndCs |  15/09/2016 |  stuff  |  
|  3 |    1    |   OYG   | TsAndCs |  16/09/2016 |  stuff  | 
|  4 |    2    |   OYG   | TsAndCs |  17/09/2016 |  stuff  | 
|  5 |    1    |   BAW   | TsAndCs |  16/09/2016 |  stuff  | 
+----------------------------------------------------------+

def doc = Document.findBy Highest NumberAndCompany('OYG')と言いたい場合は、ID 4 のオブジェクトを戻す必要があります。 def doc = Document.findBy Highest NumberAndCompany('BAW') は ID 5 のオブジェクトなどを戻す必要があります。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

4

ジョシュア・ムーアが良い解決策を提供してくれましたが、1 行に別の簡単な方法があります。

MyDomain.findAllByCompany(company, [sort: 'number', order: 'desc', limit: 1])?.first()
于 2016-09-16T12:27:34.927 に答える
3

数字で降順に並べ替え、結果を 1 つに制限すれば、十分に簡単なはずです。それで、おそらくこのようなものですか?

String companyName = 'OYG'
def results = MyDomain.createCriteria().list() {
    eq("company", companyName)
    maxResults(1)
    order("number", "desc")
}
println results[0].id // will print 4

このアプローチを使用すると、名前付きクエリを作成して、会社名をパラメーターとして渡すことができます。

于 2016-09-15T13:11:27.813 に答える