我已经在SO和其他地方查看过这个问题的一堆答案,但我可以追踪的是人们只想找到最高id,最大dateCreated或最新数据库条目的情况但是我想要做的是检索创建的最新对象,该对象也匹配另一个条件。我的域类具有以下属性:id
,number
,company
,type
,dateCreated
和content
。 company
媒体资源只能设为' 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 最高 NumberAndCompany(&#39; OYG&#39;)然后它应该带回id为4的对象.def doc = Document.findBy < strong>最高 NumberAndCompany(&#39; BAW&#39;)应该带回id 5的对象等。
任何帮助将不胜感激。谢谢!
答案 0 :(得分: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
使用此方法,您可以创建命名查询,以便将公司名称作为参数传递。
答案 1 :(得分:1)
尽管约书亚摩尔给了你一个很好的解决方案,但在一行中还有另一个简化。
MyDomain.findAllByCompany(company, [sort: 'number', order: 'desc', limit: 1])?.first()