1

支払われた、または支払われる必要があるタイムカード請求書の残業時間を計算する方法を見つけようとしています。問題は、請求書が 1 週間以上の時間をカバーし、クエリが一度に複数の従業員の履歴を取得することです。おそらく何らかのケースステートメントを使用して、これを行う方法に関する提案はありますか?

たとえば、私の従業員のリストで、週に 39 時間、次の週に 45 時間働く人がいるとします。請求書には 84 時間の労働が表示され、残業時間も 5 時間 (4 時間ではありません!) と表示する必要があります。これは、複数の請求書と複数の従業員を処理する以下のクエリのコンテキストで行う必要があります。

以下のクエリは、請求期間が 1 週間のみの場合にどのように機能するかを示しています。

select
    username,
    CASE
        WHEN paidOn IS NULL THEN 'Unpaid'
        ELSE paidOn
    END as paid,
    round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600,2) AS hours
    , CASE
       WHEN round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600,2) > 40
           THEN round((sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600 - 40) * payrate + 40 * payrate,2)
       ELSE
           round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600 * payrate, 2)
    END as pay
from
    timecard
LEFT JOIN
    employees
ON
    employees.userID = timecard.userID
WHERE
    paid != 'd'
GROUP BY
    paidOn, timecard.userID
ORDER BY
    paid DESC
LIMIT 30;
4

1 に答える 1