하루 근무 시간을 계산해서 일반(근무시간 내) 근무 시간과 Over Time(근무시간 외)을 따로 끌어내고 싶습니다.
아래와 같은 Table에서
+----------------------------------------------+
| plan_id | name | start_time | end_time | work |
+----------------------------------------------+
근무시간은 09:00 ~ 18:00 이며, 점심시간 (12:00 - 13:00)은 근무 시간에서 제외 됩니다.
그밖의 근무 시간은 Over time으로 계산합니다.
동일 근무자가 다수의 record를 가질 수 있음으로,
각각의 근무시간과 Over Time은 누적치를 최종적으로 끌어내야 합니다.
예를 들어 한달동안 근무자의 근무 시간과 Over Time을 다수의 record로 부터 잡아 내고 싶습니다.
PostresSQL은 처음이라 Query를 어떻게 해야할지 막막합니다.
도움 부탁 드립니다.
-------------------------------------------------
아래 회신 주신분들 감사드립니다.
상기 Table은 간단한 예를 들은 것으로 실재 운용중인 Table은 아닙니다.
mySQL에서 하기의 Query로 원하는 결과를 얻었습니다만,
PostresSQL로 Migration하려는데 이 부분이 잘 처리가되지 않아서 도움을 청하고 있습니다.
아래 mySQL 에서의 Query를 PostresSQL에서의 Query로 바꾸고자 합니다.
도움 부탁 드립니다.
strSQL = "SELECT *,COUNT(*) AS PlanCount,SUM(myDayWorkTime) AS UsedTime,SUM(myOverTime) AS OverTime FROM " & _
"(SELECT C.ProjNo,C.WorkID,C.EQType,A.Author,A.Customer,A.FabName,A.RBUName,A.State,A.EvtCategory, " & _
"@T1:=TIMEDIFF(A.EndTime,A.StartTime) AS A1, " & _
"@T2:=HOUR(@T1) AS A2, " & _
"@T3:=MINUTE(@T1) AS A3, " & _
"IF(TIME(A.StartTime) <= '12:00' AND TIME(A.EndTime) >= '13:00', " & _
" @myTotalTime:=ROUND(@T2+(@T3/60)-1,1), " & _
" @myTotalTime:=ROUND(@T2+(@T3/60),1)) AS A4, " & _
"IF((TIME(A.StartTime) <= '09:00' AND TIME(A.EndTime) <= '09:00') OR (TIME(A.StartTime) >= '18:00' AND TIME(A.EndTime) >= '18:00')," & _
" @T1:=TIMEDIFF(A.EndTime,A.StartTime), "& _
" @T1:='00:00') AS A5, " & _
"@T2:=HOUR(@T1) AS A6, " & _
"@T3:=MINUTE(@T1) AS A7, " & _
"@myOverTime:=ROUND(@T2+(@T3/60),1) AS A8, " & _
"IF(TIME(A.StartTime) < '09:00' AND TIME(A.EndTime) > '09:00'," & _
" @T1:=TIMEDIFF('09:00',TIME(A.StartTime)), "& _
" @T1:='00:00') AS A9, " & _
"@T2:=HOUR(@T1) AS A10, " & _
"@T3:=MINUTE(@T1) AS A11, " & _
"@myOverTime:=@myOverTime + ROUND(@T2+(@T3/60),1) AS A12, " & _
"IF(TIME(A.StartTime) < '18:00' AND TIME(A.EndTime) > '18:00'," & _
" @T1:=TIMEDIFF(TIME(A.EndTime),'18:00'), "& _
" @T1:='00:00') AS A13, " & _
"@T2:=HOUR(@T1) AS A14, " & _
"@T3:=MINUTE(@T1) AS A15, " & _
"@myOverTime:=@myOverTime + ROUND(@T2+(@T3/60),1) AS myOverTime, " & _
"@myDayWorkTime:=@myTotalTime - @myOverTime AS myDayWorkTime " & _
"FROM PlanTable A " & _
"LEFT JOIN ProjectMaster.ProjectMainTable C ON A.ProjNo=C.ProjNo " & _
"LEFT JOIN ProjectMaster.ActionPlanTable B ON A.APID = B.APID "
:
|