内側のクエリを排除:あなたが見ることができるようにのGrails/GORM/HQL:私はこの1つのような表「表」を持っている部分から
id user_id owner_id due_date
------+------------+-------------+--------------------------
1 | 1 | 1 | 2011-07-26 12:28:50
2 | 1 | 1 | 2011-07-26 15:32:11
3 | 1 | 1 | 2011-07-27 08:11:58
4 | 2 | 1 | 2011-07-26 15:19:44
5 | 2 | 1 | 2011-07-23 12:00:50
を、FK user_id
で識別されるユーザが持つ複数のエントリを持つことができます異なるdue_date
。
user_idでグループ化された最新のTable
エンティティをすべてフェッチしたいと思います。無地のMySQLでは
、それは次のようになります。
SELECT * FROM (
SELECT * FROM TABLE
WHERE owner_id = xxx
ORDER BY due_date DESC
) AS sorted
GROUP BY user_id
を私が最初のORDER BYで選択することになり、その後、ここでGROUP BY(1 SELECT内のすべてのは、残念ながら、動作しません参照例えばhttp://www.cafewebmaster.com/mysql-order-sort-groupを適用します。 )。
これを(Grailsを使用して)HQLとして実装したいと思います。問題は、以下のアプローチが動作しませんので、HQLは、部分から内側のSELECTのをサポートしていないということです。
def findMostRecentPerUser(Owner owner) {
def result = Table.executeQuery("""
from Table as t1
where t1.id in (
select sorted.id from (select * from Table as t2 where t2.owner_id = ${owner.id} order by t2.due_date desc) as sorted group by sorted.user_id
)
""")
return result
}
もう一つの方法は、基準だろうが、私はそのように実装するかさっぱりだが。
誰かが私に正しい方向を教えてくれますか?あなたの助けが大変ありがとうございます。
日付のコレクションを返信しますか? –
私は混乱していると思う。なぜサブクエリが必要ですか?それは日付で注文するだけですか? –
Grails内でさらに使用するために、行全体、つまり完全な 'Table'エンティティを選択したいと考えています。私は元の質問でこれを明らかにしました。単純な 'GROUP BY user_id ORDER BY due_date'が正しい結果につながっていないので、サブクエリが必要です。同様の問題の説明についてはこちらをご覧ください:http://www.cafewebmaster.com/mysql-order-sort-group – void