안녕하세요 저는 현명한 테이블 인 jan, feb..dec를 갖고 있으며 각각의 테이블에서 반복되는 위치에 locatin 및 actioncount 필드가 있습니다.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
조인.
추가 : 입력란에 날짜 범위도 있습니다. 지금까지 나는 범위에서 달의 목록을 얻고 있으며 매월 분리 된 결과를 얻고 있습니다. 나는 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 천만 개의 레코드가있는 거대한 테이블입니다. –
월 열의 색인을 사용하면 모든 테이블에서 조인하는 것보다 훨씬 빠를 것입니다. 5 천만 명이 훌륭한 데이터베이스가 아닙니다. –