2

我正在开发一个 PHP/MySQL 时间表系统,我要创建的报告选择所有在两个日期之间工作时间少于所需时间的员工。员工的时间以小时和分钟 (INT) 存储,但我只关心小时。

员工表如下所示:

ID | Name
1  | George
2  | Fred

timesheet_entry 表:

ID | employeeID | hour | date
1  | 1          | 2    | 2013-07-25
2  | 2          | 4    | 2013-07-25
3  | 1          | 3    | 2013-07-25

因此,如果我选择在 2013 年 7 月 25 日工作少于 5 小时(PHP 变量 hrsLimit)的员工,它应该返回 2 Fred,因为 George 在该日期总共工作了 5 小时。我有一个 HTML 表单,因此用户可以设置查询的变量。

我努力了:

SELECT employeeid,
       employeename
FROM   employee
       JOIN timesheet_entry tse
         ON tse.tse_employeeid = employeeid
            AND Sum(tse.hour) < $hrslimit  

我还没有担心日期。

这里令人困惑的是我们要连接两个表。也许我应该选择时间并将 SUM 子句放在 WHERE 的末尾?

4

1 回答 1

2

您需要对数据进行分组,然后将 SUM 条件放在查询的 HAVING 部分中。

select employee.id,
       employee.Name,
       Date,
       sum(`hour`) 
from timesheet_entry
join employee on timesheet_entry.employeeID=employee.ID
group by timesheet_entry.employeeID,date
having sum(`hour`)<$hrslimit

SQLFiddle 演示

于 2013-07-25T12:36:25.537 回答