2011-09-13 7 views
0

クエリ:Grailsでドメインエンティティの最新エントリを取得する方法を知りたい。[クエリ]各グループのGrails getLastエントリ

問題ドメイン:

class Parent { 

    String name 
    static hasMany = [children:Child] 
} 


class Child { 

     String name 
     Parent parent 
     static belongsTo = [parent:Parent] 

    } 

データモデル enter image description here

結果

私はIDが4のレコードを引っ張るのが好き

critriaがあるべき7「を取得私は各親の最後の記録がどこにあるのか'ロックスの%' のような雨が

は、これまでのところ、私は事前に

SELECT 
MAX(id) 
FROM child 
WHERE parent_id IN(SELECT 
        p.id 
        FROM parent AS p 
        JOIN child AS c 
         ON (c.parent_id = p.id 
          AND c.name LIKE 'Rox%')) 
GROUP BY parent_id 

感謝を試してみました。

+0

"最終記録"は何を構成していますか?それは何に基づいていますか? –

+0

私はプレーンSQLクエリで質問を更新しました。おそらく、実際に私が探しているものを見つけ出すのに役立ちます。ありがとうございます – Rehman

+0

'dateCreated'タイムスタンプではなく最新のレコードを見つけるために' id'を使用する理由はありますか?前者は誤りが起きやすいようです。 –

答えて

0

あなたの説明は少し怪しげですが、私は、これはあなたが欲しいものだと思う:私は、私の答えを入力した間は、周りのあなたの全体の質問を変更し

に周りにそれを変更:編集

def idList = [1,4] 
def c = Parent.createCriteria() 
def result = c.list { 
    'in'("id", idList) 
    children { 
    like("name","Rox%") 
    } 
    groupProperty("id") 
} 

一致。

最終編集: 編集したコード内の子に{}のソートを追加して、必要な並べ替えを取得します。

+0

ありがとう、それは動作します。また、私はあなたのさらなる提案を適切な答えを投稿しているような '子供たちにソート' – Rehman

0
  Parent.createCriteria().list(max:10,offset:0) { 
        'children' { 
            like("name","Rox%") 
            order("id","desc") 
            groupProperty("id") 
           } 


        groupProperty("id") 
       } 

または両方の基準クエリの結合に基づいて、互いに異なる

 Parent.createCriteria().list(max:10,offset:0) { 

          createAlias("children", "ac") 
          like("ac.name","Rox%") 
          order("ac.id","desc") 
          groupProperty("ac.id") 

        groupProperty("id") 
       } 

。条件内の結合をさらに読み込むために http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html

0

この場合、SQL window functionが必要です。休止/ HQLで単一のクエリでそれを行うための方法はありません

select max(id) 
over(partition by parent_id, order by dateCreated) 
from child 
group by parent_id 

:Oracleでは、それは次のようになります。

関連する問題