JPA QueryDSL 按天计数聚合

JPA QueryDSL Count Aggregation By Days

我有这个 Sql 查询。每天生成 returns 个事件。

SELECT DATE_FORMAT(`timestamp`, "%y-%m-%d") AS date , COUNT(*) 
FROM `Event` 
WHERE `active`=1 
GROUP BY date

输出

 |   date   |   Count   |
 ------------------------
 | 14-09-29 |     1     |
 | 14-11-02 |     1     |
 | 14-11-03 |     3     | 
     ...         ...

我想在 JPA QueryDSL 上执行此查询,但我不知道该怎么做,因为我还没有找到执行此操作的方法DATE_FORMAT('timestamp', "%y-%m-%d") AS date

是否可以在 JPA QueryDSL 上执行此查询,或者它不能通过限制完成?

谢谢。

您可以使用 @Formula annotation 将计算列添加到您的实体,然后在 QueryDSL 调用中使用计算列。

public class MyEntity {
...
  @Formula('DATE_FORMAT(`timestamp`, "%y-%m-%d")')
  String myDatStr;
...
}

最后我用这个查询解决了它。我还添加了日期范围过滤器。

 QEvent qEvent = QEvent.event;

 JPAQuery query = new JPAQuery(entityManager);

 return query.from(qEvent)
                 .where(qEvent.active.eq(true)
                    .and(qEvent.sensorId.equalsIgnoreCase(sensorId)
                    .and(qEvent.timestamp.after(rangeStart)
                    .and(qEvent.timestamp.before(rangeEnd)))))
             .groupBy(qEvent.timestamp.dayOfYear())
             .list(new QTuple(qEvent.timestamp, Wildcard.count));

感谢您的帮助。