2

我已经在 SO 和其他地方查看了这个问题的一堆答案,但我能找到的只是人们只想找到最高 id、最大 dateCreated 或最新数据库条目但我想做的是检索的情况最新创建的也符合另一个条件的对象。我的域类具有以下属性:idnumbercompanytype和。该属性只能设置为“OYG”或“BAW”,并且该属性是一个自动递增的 int。我想要做的是检索其属性设置为“OYG”或“BAW”的最高记录。dateCreatedcontentcompanynumbernumbercompany

所以这里有一个例子:

+----------------------------------------------------------+
| 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

尽管 Joshua Moore 为您提供了一个很好的解决方案,但在一行中还有另一个更简单的方法。

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

如果您按数字降序排序并将结果限制为一个,那么应该很容易。所以也许是这样的?

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 回答