根据选定的日期范围计算工作人员的总小时数

umuewwlo  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(238)

我们的数据库:

您好,我想问一下如何根据选定的日期范围计算每个工人id的小时总数,类型5、类型1、类型2、类型3,如图所示?
例如,我想计算从2020-06-08到2020-06-21的总工时,

workerid    hour      type5     type1     type2     type3
04405     00:00:00  00:00:00  00:00:00   00:00:00  00:00:00
04408     12:00:00  02:00:00  00:00:00   08:00:00  02:00:00
04458     12:30:00  00:00:00  08:00:00   04:30:00  00:00:00

其中04408在日期范围内有2天,因此它将对小时进行求和,而04405在日期范围内没有任何ot,因此它返回00:00:00
我该怎么用sql或php,现在我正在创建一个android应用程序,谢谢
更新---

<?php
include_once("dbconnect.php");

$sql ="with tempTable as (
select 
t.workerid,
sum(DATEDIFF(minute,0,t.hour)) hour,
sum(DATEDIFF(minute,0,t.Type5)) Type5,
sum(DATEDIFF(minute,0,t.Type1)) Type1,
sum(DATEDIFF(minute,0,t.Type2)) Type2,
sum(DATEDIFF(minute,0,t.Type3)) Type3
from othour t
group by t.workerid
    ) 
select 
t.workerid,
format(DATEADD(minute,t.hour,0),'HH:mm:ss')  as hour,
format(DATEADD(minute,t.Type5,0),'HH:mm:ss')  as Type5,
format(DATEADD(minute,t.Type1,0),'HH:mm:ss')  as Type1,
format(DATEADD(minute,t.Type2,0),'HH:mm:ss')  as Type2,
format(DATEADD(minute,t.Type3,0),'HH:mm:ss')  as Type3
from tempTable t";

$result= $conn -> query($sql);

if($result -> num_rows > 0) {
    $response["ot"] = array();
    while ($row = $result -> fetch_assoc()) {
        $ot = array();
        $ot[workerid] = $row["workerid"];
        $ot[othour] = $row["hour"];
        $ot[type5] = $row["Type5"];
        $ot[type1] = $row["Type1"];
        $ot[type2] = $row["Type2"];
        $ot[type3] = $row["Type3"];
        array_push($response["ot"], $ot);
    }
    echo json_encode($response);
} else {
    echo json_encode("error");
}

$conn ->close();

?>
9vw9lbht

9vw9lbht1#

with tempTable as (
select 
t.workerid,
sum(DATEDIFF(minute,0,t.hour)) hour,
sum(DATEDIFF(minute,0,t.type5)) type5,
sum(DATEDIFF(minute,0,t.type1)) type1,
sum(DATEDIFF(minute,0,t.type2)) type2,
sum(DATEDIFF(minute,0,t.type3)) type3
from YourTable t
/*Where Conditions*/
group by t.workerid
    )

select 
t.workerid,
format(DATEADD(minute,t.hour,0),'HH:mm:ss')  as hour,
format(DATEADD(minute,t.type5,0),'HH:mm:ss')  as type5,
format(DATEADD(minute,t.type1,0),'HH:mm:ss')  as type1,
format(DATEADD(minute,t.type2,0),'HH:mm:ss')  as type2,
format(DATEADD(minute,t.type3,0),'HH:mm:ss')  as type3
from tempTable t

相关问题