2016-09-15 13 views
0

저는이 질문에 대한 답변을 다른 곳에서 보았습니다. 그러나 내가 추적 할 수있는 것은 사람들이 가장 높은 ID, 최대 날짜를 찾고자하는 것입니다. 최신 DB 항목이지만 내가하고 싶은 것은 다른 기준과 일치하는 생성 된 최신 개체를 검색하는 것입니다. 내 도메인 클래스의 속성은 id, number, company, type, dateCreatedcontent입니다. company 속성은 'OYG'또는 'BAW'로만 설정할 수 있으며 number 속성은 자동 증가 int입니다. 내가하고 싶은 일은 number이 가장 높은 레코드 인 'company'이 'OYG'또는 'BAW`로 설정된 레코드를 검색하는 것입니다.grails - findBy 가장 높은 ID와 다른 기준

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

그때는 ID 4. 데프 문서 = 문서와 객체를 돌려 보내야한다 데프 문서 = Document.findBy 최고 NumberAndCompany ('OYG')을하고 싶은 말 :

그래서 여기가 예입니다 .findBy 최고 NumberAndCompany ('BAW')는 ID 5의 객체 등을 가져와야합니다.

도움이 되셨을 것입니다. 감사!

답변

2

숫자로 내림차순으로 주문하고 결과를 1로 제한하면 충분히 쉬워야합니다. 그러면 어쩌면이게 뭔가?

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

이 접근 방식을 사용하면 회사 이름을 매개 변수로 전달할 수 있도록 명명 된 쿼리를 만들 수 있습니다.

0

조슈아 무어가 좋은 해결책을 제시 했음에도 불구하고 한 줄에 다른 간단한 것이 있습니다.

MyDomain.findAllByCompany(company, [sort: 'number', order: 'desc', limit: 1])?.first()