Java JPA QueryDSL计数汇总(按天)
我有这个Sql查询。它返回每天生成的事件数Java JPA QueryDSL计数汇总(按天),java,mysql,hibernate,jpa,querydsl,Java,Mysql,Hibernate,Jpa,Querydsl,我有这个Sql查询。它返回每天生成的事件数 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-0
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\u格式(“timestamp',%y-%m-%d”)作为日期执行的方法
是否可以在JPA QueryDSL上执行此查询,或者受限制无法执行此查询
谢谢。您可以使用将计算列添加到实体中,然后在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));
谢谢你的帮助。在这种情况下不起作用。最后,我找到了一个满足我需要的查询。无论如何,谢谢你:这个解决方案可能不是完整的JPA,但在JPAQuery中使用带有日期的表达式是唯一可行的方法。在我的例子中,我想要两个日期的月份之间的差异。我就是这样用的<代码>@Formula(“四舍五入(月之间)(TRUNC(DATE_B,'MONTH')、TRUNC(DATA_A,'MONTH'))、0)”字符串myDatStr代码>