I made the following request:

CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Tuple> queryFilter = builder.createTupleQuery(); Root<MEg> root = queryFilter.from(MEg.class); queryFilter.multiselect(root.get("dInp").alias("dInp"), builder.count(root.get("dInp")).alias("cnt")); queryFilter.groupBy(root.get("dInp")); queryFilter.orderBy(builder.asc(root.get("dInp"))); List<Predicate> predicateList = new ArrayList<>(); Predicate filterApps = builder.between(root.get("dInp").as(Date.class), search.getBegDate(), search.getEndDate()); predicateList.add(filterApps); Predicate[] predicates = new Predicate[predicateList.size()]; predicateList.toArray(predicates); queryFilter.where(predicates); TypedQuery<Tuple> tq = em.createQuery(queryFilter); List<Tuple> t = tq.getResultList(); 

As a result, it gives the following data:

 {"dInp":"08.07.2016","cnt":1}, {"dInp":"08.07.2016","cnt":2}, {"dInp":"08.07.2016","cnt":1}, {"dInp":"08.07.2016","cnt":1}, {"dInp":"12.07.2016","cnt":1}, {"dInp":"13.07.2016","cnt":1}, {"dInp":"13.07.2016","cnt":1}, {"dInp":"13.07.2016","cnt":2} 

How can I do that he would only deduce one date once and calculate their sum?

    1 answer 1

     queryFilter.multiselect( builder.function("trunc", Date.class, root.get("dInp")).alias("dInp"), builder.count(builder.function("trunc", Date.class, root.get("dInp"))).alias("cnt")); queryFilter.groupBy(builder.function("trunc", Date.class, root.get("dInp"))); queryFilter.orderBy(builder.asc(builder.function("trunc", Date.class, root.get("dInp")))); filterApps = builder.between( builder.function("trunc", Date.class, root.get("dInp")).as(Date.class), search.getBegDate(), search.getEndDate()); predicateList.add(filterApps);