Привет, у меня есть как в месячной таблице jan, feb..dec, и у меня есть поля locatin и actioncount в каждом с местоположением, повторенным в каждой таблице.
У меня этот запрос написан примерно на SQL, у меня естьмесяц доменных объектов, теперь я должен преобразовать его в Hibernate Query (HQL или Criteria api или что-нибудь еще ..).Как мне конвертировать это?Количество месяцев предоставляется в виде списка и является переменной, как показано ниже, sql из этого списка monthsToQuery = [oct,nov,dec,jan]
.. это также список переменных.Это может быть [февраль, мар, апр] или [июль]
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
Я делаю левые соединения, потому что я не хочу терять какие-либо места в разные месяцы.
Дополнение: Я такжеиметь диапазон дат в качестве входных данных.До сих пор я получаю список месяцев из диапазона и получаю результаты для каждого месяца отдельно.Мне нужно написать запрос, чтобы дать окончательный требуемый результат в 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
}
Я читал некоторые места, где вместо критериев вложенности я также могу использовать псевдоним в критериях.Я новичок в этом .. кто-нибудь знает дальше?