我有一個表「表」與此類似:Grails的/格姆/ HQL:消除內部查詢的FROM部分
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(全部在一個SELECT不起作用,很遺憾看到這裏如http://www.cafewebmaster.com/mysql-order-sort-group。 )。
現在我想實現這個作爲HQL(與Grails)。問題是,HQL不支持在內部SELECT的FROM部分,所以下面的方法將不起作用:
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中進一步使用。我在原來的問題中澄清了這一點。子查詢是必需的,因爲一個簡單的'GROUP BY user_id ORDER BY due_date'不會導致正確的結果,請參閱此處以獲取類似的問題描述:http://www.cafewebmaster.com/mysql-order-sort-group – void