2016-07-28 3 views
0

週ごとに各従業員の合計アンダータイムを得る方法を教えてください。 1か月あたり。私にはviewがあり、その中に従業員1人当たりの列はundertimeovertimeとなっています。しかし、私は週にTotalUndertimeを取得する必要があります。週2列から合計を得る方法

|EmpID |DayofWeek|DatePresent|Overtime |Undertime| 
|3050001|Friday |2016-04-01 |   |00:01:00 | 
|3050001|Monday |2016-04-04 |   |01:00:00 | 
|3050001|Tuesday |2016-04-05 |00:30:00 |   | 
|3050001|Wednesday|2016-04-06 |00:30:00 |   | 
|3050001|Thursday |2016-04-07 |00:05:00 |   | 
|3050001|Friday |2016-04-08 |00:05:00 |   | 

従業員がMondayUndertimeを持っている場合、従業員はTuesday - Fridayから、次の日にUndertimeのために支払うことができます。または、Tuesdayに従業員のUndertimeがある場合、従業員は上記の表のUndertime. The TotalUndertime = "00:01:00"の代金を支払うためにWednesday - Fridayを持っています。

日付と時刻を使用したmysqlクエリに関してはちょうど初心者です。私は関数や手続きを使うべきですか?

このコードを使用して取得しましたが、機能しませんでした。

CREATE DEFINER = `root`@`localhost` PROCEDURE `getUndertime` (IN `varDatePresent` DATE, IN `varEmpID` VARCHAR(8)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 
BEGIN SELECT DAY(LAST_DAY(varDatePresent)) 
INTO @totaldays ; 

SET @daycount =0; 

WHILE(
@daycount < @totaldays 
) DO SELECT Undertime 
FROM view_dtr 
WHERE EmpID LIKE '%varEmpID%' 
AND DatePresent = varDatePresent 
INTO @undertime ; 

SELECT Overtime 
FROM view_dtr 
WHERE EmpID LIKE '%varEmpID%' 
AND DATE_ADD(DatePresent, INTERVAL 1 
DAY) 
INTO @overtime ; 

SET @totalUndertime = @undertime - @overtime ; 

SET @daycount = @daycount +1; 

END WHILE; 

SELECT @totalUndertime ; 

END ; 

どのような提案が私に非常に役立ちます。 ありがとうございます。

答えて

0

Group Byトリックはしますか?

SELECT EMPID, Week(DatePresent) as 'WeekNumber', 
SEC_TO_TIME(SUM(COALESCE(undertime,0)-COALESCE(overtime,0)) * 3600) as 'TotalUndertime' 
FROM table_name GROUP BY EmpID, Week(DatePresent) 

使用法:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

編集:TotalUndertimeのあなたの定義に基づいて。補足として、EMPIDをフィルタリングするときは、LIKEを使用しないことを強くお勧めします。

+0

私はCOALESCE()関数を使用していません。結果は整数であったにもかかわらず、多くの助けとなりました。 -12、4、など私は分を取得する方法を見つける必要があります。 – Clorae

+0

私は謝罪しましたが、あなたのアンダータイムと残業の列のデータ型に気付きませんでした。 sqlfiddleを介してテストしてみましょう。私はあなたに戻ってきます。 – Eduard

+0

SEC_TO_TIME関数が追加されました。 – Eduard

関連する問題