私の質問は、ここ StackOverflow で見た他の質問とは微妙に異なるため、これを以前の回答と混同しないでください。
質問があります
SELECT tab1.Id
FROM TABLE1 tab1
WHERE tab1.modified_date between to_date('01/04/2013 10:00:00', 'dd/mm/yyyy HH:MI:SS') and to_date('01/04/2013 11:15:00', 'dd/mm/yyyy HH:MI:SS')
GROUP BY tab1.Id
ORDER BY max(tab1.received_date) desc
上位 500行を選択したいのですが、Oracle は GROUP および ORDER BY 条件の前に where 句を処理するため ( evidence )、このクエリを別のクエリでラップして上位 500 を選択する必要があります。
だから、今私のクエリは次のようになります...
SELECT *
FROM (SELECT tab1.Id
FROM TABLE1 tab1
WHERE tab1.modified_date between to_date('01/04/2013 10:00:00', 'dd/mm/yyyy HH:MI:SS') and to_date('01/04/2013 11:15:00', 'dd/mm/yyyy HH:MI:SS')
GROUP BY tab1.Id
ORDER BY max(tab1.received_date) desc ) sub
WHERE ROWNUM <=500
これはすべてうまく機能しますが、これを QueryOver API を使用して NHibernate クエリに変換するのに苦労しています。内部クエリは単純です。
var subquery = QueryOver.Of<Table1>()
.Select(Projections.Group<Table1>(e => e.Id))
.....where clause
.OrderBy(Projections.Max<Table1>(e => e.Received_Date)).Desc
しかし、これをselect * from subquery where rownum <= 500でラップするにはどうすればよいですか?