2016-07-28 16 views
0

Wie bekomme ich die Gesamtunterzeit für jeden Mitarbeiter pro Woche. pro Monat. Ich habe eine view, in der es Spalten undertime und overtime pro Tag pro Mitarbeiter hat. aber ich muss die TotalUndertime pro Woche bekommen.Wie bekomme ich die Summe aus 2 Spalten in einer Woche?

|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 |   | 

Wenn der Arbeitnehmer eine Undertime auf Monday hat, kann der Mitarbeiter für die Undertime an folgenden Tagen von Tuesday - Friday zu zahlen. Oder wenn der Angestellte eine Undertime auf Tuesday hat, hat der Angestellte Wednesday - Friday, um für die Undertime. The TotalUnderzeit = "00:01:00" in der Tabelle zu zahlen, die oben gezeigt wird.

Ich bin nur ein Neuling, wenn es um MySQL Abfragen mit Datum und Uhrzeit geht. Sollte ich Funktion oder Prozedur verwenden?

Ich habe diesen Code verwendet, um es zu bekommen, aber es hat nicht funktioniert.

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 ; 

Jeder Vorschlag wird mir sehr helfen. Vielen Dank im Voraus.

Antwort

0

Würde nicht Group By den Trick machen?

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) 

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

Edit: Basierend auf Ihre Definition von TotalUndertime. Als Randnotiz empfehle ich dringend, LIKE nicht zu verwenden, wenn Sie Ihre EMPID filtern.

+0

Ich habe es vorher getan, aber ohne die Funktion COALESCE(). Es half sehr, obwohl die Ergebnisse ganze Zahlen waren, was bedeutet, dass es die Stunden berechnet, z. -12, 4, etc. Ich muss einen Weg finden, um auch die Minuten zu bekommen. – Clorae

+0

Entschuldigung, ich habe den Datentyp für Ihre Unterzeit- und Überstundenspalte nicht bemerkt. Lass mich das via sqlfiddle testen und ich melde mich bei dir. – Eduard

+0

SEC_TO_TIME-Funktion hinzugefügt. – Eduard