아래와 같이 세개의 컬럼이 존재한다.
상품번호 |
판매수량 |
일자 |
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 를 사용했다.