0

NHibernate に Window 関数を使用させる方法はありますか?

具体的には、次のようなクエリを作成しようとしています。

SELECT
  date,
  SUM(Price) OVER (ORDER BY date)
FROM purchases
GROUP BY date

Web を検索しましたが、ウィンドウ関数と NHibernate について何も見つかりません

具体的には、NHibernate の QueryOver インターフェイスを使用しています。

それが不可能な場合、コード内でデータベースの独立性を維持するために他にどのような解決策がありますか?

4

3 に答える 3

0

良い質問ですが、残念ながら、NHibernate 自体でそのようなウィンドウ関数を生成できるコードを見たことがありません。

唯一のオプションは、名前付きクエリを使用することです。名前付きクエリでは、手動で SQL を入力するか、ストアド プロシージャを呼び出すことができます。

あなたは、ソリューション データベースを独立させたいと述べました。私は常に SQL Server を使用しているので、個人的にはあまり気にしたことはありませんが、あなたがどこから来たのかは理解できます。インメモリ SQLite ソリューションを使用して統合テストを実行し、SQL Server または Oracle で実際のコードを実行する人が何人かいると聞いたことがあります。

あなたのシナリオでは、質問のSQLがANSIに準拠しているとは思わないので、名前付きクエリを使用してデータベースに依存しないようにする場合は、残念ながら別の方法で書き直す必要があります。

于 2013-03-29T01:02:43.350 に答える
0

私の知る限り、QueryOverAPI ではそれを行うことはできません。

可能な限りDBに依存しないようにするために行うことは、ウィンドウ化されたクエリをテーブルとクエリによるグループ間の結合と見なすことです。次に、この結合を導く QueryOver を記述します。

クエリを考慮すると、次のようになります: (ただし、この例では、ウィンドウ化されたクエリの必要性が実際に示されているようには見えません)

SELECT
  purchases.date,
  purchasesGroup.priceSum
FROM 
     purchases
INNER JOIN 
     (SELECT date, SUM(Price) as priceSum  FROM purchases GROUP BY date) 
       AS purchasesGroup
on purchases.date = purchasesGroup.date
于 2013-03-29T13:06:41.850 に答える