NHibernate の Criteria API を使用して SQL クエリを表現しようとしていますが、NHibernate がオブジェクト中心であるのに対し、データベース中心の方法で考えているため、困難に直面しています。
SQL(うまく機能します):
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
inner join
(select max(innerT.id)
from tbl innerT
group by innerT.col1) grpT
on outerT.id = grpT.id
基本的に、これはテーブル自体のサブセットに対するテーブルの自己結合です。自己結合を制限に変えてみることができると思います:
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
where outerT.id in (select max(innerT.id) from tbl innerT group by innerT.col1)
しかし、NHibernate を使用してそれを表現する方法もわかりません。私は DetachedCriteria の ProjectionList と戦っており、max(id)
グループ化中にのみ選択したいと考えていますcol1
。
ご提案いただきありがとうございます。