こんにちは私は毎月賢明なテーブルjan、feb..decを持っています。それぞれのテーブルに繰り返しロケートとアクションカウントフィールドがあります。sqlクエリで、ハイバネートクエリへの変換
私はこのクエリをSQLで大まかに書いています。今月のドメインオブジェクトがあります。これをHibernate Query(HQLまたはCriteria APIなど)に変換する必要があります。どのように私はそれを変換するのですか? 月の数はリストとして提供されていますので、 の下のsqlはこのリストのmonthsToQuery = [oct,nov,dec,jan]
です。これも可変リストです。これは、[2月、傷、4月]または[7月]
select loc, sum(tcount) from (
(select location as loc, sum(actioncount) as tcount from oct group by location) left-join
(select location as loc, sum(actioncount) as tcount from nov group by location) left-join
(select location as loc, sum(actioncount) as tcount from dec group by location) left-join
(select location as loc, sum(actioncount) as tcount from jan group by location)
) group by loc
することができ、私は左を をやっている私は別の数ヶ月の間で任意の場所を失いたくないので、参加します。
追加:日付範囲も入力しています。これまでのところ、私は範囲から数ヶ月のリストを取得しており、毎月separatleyの結果を得ています。私は1つのクエリで最終的な必要な結果を与えるためにクエリを記述する必要があります。ここ は私が今まで持っているものです。
// sTblList - list of all month domains in the date range..
def getSummary(sTblList,SfromDate,StoDate,res_id, groupCol,sumCol){
try{
Date fromDate = new Date().parse("yyyy-MM-dd", SfromDate);
Date toDate = new Date().parse("yyyy-MM-dd", StoDate);
def resourceInstance=Resources.get(res_id);
sTblList.each{
def OnemonthList=it.createCriteria().get {
eq('graresource',resourceInstance)
between('currentdate', fromDate, toDate)
projections {
sum(sumCol,'tcount')
groupProperty(groupCol)
}
}
return sumMap // sumMap should have all months results combined
}
私の代わりに、ネストのcriteriasの私も基準にエイリアスを使用することができますいくつかの場所をお読みください。私はこれに新しいです.. 誰も知っていますか?
私は希望スキーマを正規化して開始し、月の列を持つ単一の表を持つようにします。この方法ですべてがずっと簡単になります。 –
私たちはパフォーマンスと集計のためにデータを12個のテーブルに分けましたが、そうでなければ5千万のレコードを持つ巨大なテーブルです。 –
月のインデックスのインデックスを使用すると、おそらくこれらのすべてのテーブルを結合するよりもはるかに高速になります。 5000万人は良いデータベースではありません。 –