Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jpa jpql的复杂sql查询_Java_Sql_Hibernate_Jpa_Jpql - Fatal编程技术网

Java 使用jpa jpql的复杂sql查询

Java 使用jpa jpql的复杂sql查询,java,sql,hibernate,jpa,jpql,Java,Sql,Hibernate,Jpa,Jpql,我使用JPA2作为dao层 假设我有一个如下表(只是一个示例): 根据给定的表格,(实际上比这更复杂),我如何得到这样的结果 emp_name week approver_name status hours (add hours together) emp1 2010-01-02 app1 a 4 emp1 2010-01-02 app2 b 3 emp1 2

我使用JPA2作为dao层

假设我有一个如下表(只是一个示例):

根据给定的表格,(实际上比这更复杂),我如何得到这样的结果

emp_name     week     approver_name    status  hours (add hours together)
emp1      2010-01-02      app1          a        4
emp1      2010-01-02      app2          b        3
emp1      2010-01-09      app1          b        2
emp1      2010-01-09      app2          a        7
emp2      2010-01-02      app1          b        5
emp2      2010-01-02      app1          a        3
emp2      2010-01-02      app2          a        9
emp2      2010-01-09      app1          a        5
emp2      2010-01-09      app2          a        4
emp2      2010-01-09      app2          b        7
注意:还必须区分状态。此外,数据库中不存在小时列,该列为开始时间和结束时间

所以任何人都可以有一些好主意?我不能按任何列分组,因为它会混合结果

谢谢。试试这个:

SELECT emp_name, week, approver_name, status, SUM(hours)
FROM MyTable
GROUP BY emp_name, week, approver_name, status
ORDER BY emp_name, week, approver_name, status

谢谢你的帮助。看起来很棒。但是,如果start_timestamp和end_timestamp列替换小时,有什么好方法吗?嗨,Michael,如果表中没有小时列,只有start和end timestamp,我如何计算正确的小时数?不确定JPA是否支持类似MySQL的timestamp。如果它将SUM(hours)替换为SUM(TIMESTAMPDIFF(HOUR,start,end),如果您的表是从JPA实体生成的,请尝试使用@Temporal(TemporalType.TIMESTAMP),如果您的表是手动创建的,请将列数据类型更改为TIMESTAMP,而不是DATE(取决于供应商)。
SELECT emp_name, week, approver_name, status, SUM(hours)
FROM MyTable
GROUP BY emp_name, week, approver_name, status
ORDER BY emp_name, week, approver_name, status