Java 使用jpa jpql的复杂sql查询
我使用JPA2作为dao层 假设我有一个如下表(只是一个示例): 根据给定的表格,(实际上比这更复杂),我如何得到这样的结果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
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