JPA QueryDSL按天数计算聚合

时间:2015-08-11 08:47:42

标签: 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-03 |     3     | 
     ...         ...

我想在JPA QueryDSL上进行此查询,但我不知道该怎么做,因为我找不到办法DATE_FORMAT('timestamp', "%y-%m-%d") AS date

是否可以在JPA QueryDSL上执行此查询,或者无法通过限制来完成此查询?

谢谢。

2 个答案:

答案 0 :(得分:1)

最后我用这个Query解决了这个问题。我还添加了日期范围过滤器。

<!DOCTYPE html>
<html ng-app="demo">
    <head>
        <meta charset="utf-8" />
        <title>AngularJS Plunker</title>
        <script>
            document.write('<base href="' + document.location + '" />');
        </script>
        <link rel="stylesheet" href="style.css" />
        <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.3/angular.js" data-semver="1.4.3"></script>
        <script src="app.js"></script>
    </head>
    <body ng-controller="MainController">
        <p>This is the message {{message}}</p>
    </body>
</html>

感谢您的帮助。

答案 1 :(得分:0)

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

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