Рассчитать общий час рабочего на основе выбранного диапазона дат - PullRequest
0 голосов
/ 13 июля 2020

База данных OTHOUR:

введите описание изображения здесь

Здравствуйте, я хотел бы спросить, как рассчитать общую сумму часов, type5, type1, type2, type3, как показано на картинке для каждого идентификатора работника на основе выбранного диапазона дат?

Например, я хочу рассчитать общий час рабочего с 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();

?>

1 Ответ

0 голосов
/ 13 июля 2020
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

результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...