본문 바로가기

Programming!

QueryDSL 이용시 datetime column type에 대한 group by

아래와 같이 세개의 컬럼이 존재한다. 



상품번호 

 판매수량

 일자 

 100003

 2

 2018-12-19 12:23:11

 100003

 1

 2018-12-18 11:13:09

 100003

 1

 2018-12-18 09:13:09


요구사항은 일자별 판매수량 sum이라고 치자.


즉, 아래와 같이 시간은 제거되고 일자 만으로 groupby와 판매수량에 대한 sum 처리를 해야 한다.


100003 | 2 | 2018-12-19

100003 | 2 | 2018-12-18


QueryDSL으로 이용하려니 날짜에 대한 시간 제거를 모르겠다..흠.

해서 MySQL의 자체 function을 이용하는 방법으로 우선 해결.


코드는 다음과 같다.

StringTemplate datePathOrderDate = Expressions.stringTemplate(

    "DATE_FORMAT({0},'{1s}')", qOrderItem.orderDate, ConstantImpl.create("%Y-%m-%d")); 



from(qOrderItem).where(...).and(...)

.select(Projections.constructor(LowStockGoodsStatistic.class ...sum()datePathOrderDate.as("salesDay") ))

.groupBy(datePathOrderDate).fetch();


Entity가 없는 일반 통계용 결과이므로 Projections.constructor 를 사용했다.