2013-04-02 2 views
1
id  title        start     end 
1 Doing Coding for this project. 2013-04-02 02:00:00  2013-04-02 04:00:00 
2 Doing Coding for this project. 2013-04-02 04:00:00  2013-04-02 06:00:00 
3 Doing Coding for this project. 2013-04-02 06:00:00  2013-04-02 06:30:00

위의 내용은 MySQL 데이터베이스 테이블 레코드입니다. 이제 총 수를 얻고 싶습니다 hours.mysql 총 작업 시간

나는 TimeSheet Management Application을 개발 중입니다. 직원의 총 근무 시간과 총 시간을 표시해야합니다. (즉, 데이터 공유에 따라 04:30:00)

무엇을 시도 했습니까?

SELECT HOUR(TIMEDIFF(end,start)) AS 'totalHour' 그러나 모든 레코드가 아닌 각 행에 대해서만 작동합니다.

나는 또한 TIMESTAMPDIFF을 시도했다.

이것이 가능합니까?

나는 그들 하나 하나를 시도했지만 매번 난 그냥 4 또는 4.5000를 얻을 수 있지만 06:30:00을 반환해야 사람들로부터받은 응답에서 편집

.

+1

당신은'SUM (..)'을 시도 했습니까? –

+0

@Akam 고맙습니다. 답장을 보내지 만 'SUBTRACTED'답장을 보내지 않을 것이라고 생각합니다. –

+0

당신은 그것을 시도해보고 실제 결과를 볼 수 있습니다 –

답변

2

에 당신 4:30해야 답을 준 자료에 따르면이 쿼리

SELECT 
id, 
title, 
TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(TIMEDIFF(end, start)))), "%h:%i") AS diff 
FROM 
tbl1 
GROUP BY 
title 

을 시도 변경

. 당신이 기록을 교차 체크.

FIDDLE

3

범위가 HOUR() 인 경우 0 to 23이므로 diff로 총 시간 동안 사용하는 것은 올바르지 않습니다. 당신이 전체 프로젝트를 계산하려면, 당신은 모든 시간의 차이를 요약해야

SELECT TIMESTAMPDIFF(HOUR, start, end) AS `totalHour` FROM ... 

하고는 TIME_FORMAT()하는 인쇄와 같은 funciton와 아마 포맷 인쇄 : 단일 값에 대한

당신은 같은 TIMESTAMPDIFF()을 사용할 수 있습니다 24보다 큰 시간 :

시간 값은 %의 H와 % K 형태 23 시간보다 큰 시간의 일부를 포함한다면 지정자는 보통 범위 인 0.23보다 큰 값을 생성합니다. 다른 시간 형식 지정자는 시간 값을 모듈로 12로 생성합니다.

그래서 당신은 사용할 수 있습니다

SELECT TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(end) - TIME_TO_SEC(start))), "%H") 
      AS `totalHour` 
FROM ... 
GROUP BY sort_of_project_id 

당신이 (코멘트에서 제안)도 초/분 필요한 경우, 하나를 사용 :

  • time_to_sec(<left side of select>)/3600하는 값을 반환하는 like 4.84 hours
  • TIME_FORMAT(..., "%H:%m:%s") 위 테이블이 쿼리를 실행하면

    SELECT sum(time_to_sec(timediff(end, start))/ 3600) AS 'totalHour' from test; 
    

    당신이, 주어진 예를 들어

    :

+0

고맙습니다. 거의 대답이 없지만 분과 초를 얻지는 못합니다 ... –

+0

나는 매번 o4를 얻고 있습니다 ...하지만 돌아와야합니다. 06:30:00 –

+0

나는 당신을 시험해 보았습니다. 추천 검색어 ... 나는'user_id'에'sort_of_project_id'를 대체하고 테이블 이름을 추가하기 위해 그룹에 대해 user_id를가집니다. –

1

이 같은 시도 표시 4:38:24, 그것은 당신에게 총 시간을 더 줄 것 출력은 4.5 시간입니다.

희망이 있으면 도움이 될 것입니다.

+0

네 반환하는'4.5000'하지만 내 질문에 표시된 사전 기록으로'06 : 30 : 00'이어야합니다. –

+1

@DipeshParmar 내가 볼 수 있듯이 매일 매일의 차이가 너무 많아서 데이터가 4.5가 아니라 6.5가되어야합니다. – Toretto

0

SELECT HOUR(TIMEDIFF(end,start)) AS 'totalHour'  

SELECT sum(TIMESTAMPDIFF(HOUR, end, start)) AS 'totalHour' 
1

난 그냥 임시 테이블이 dataimport

Table Format

라고하고 쿼리를 썼다 만들어 Query is not working

이미 다른 스레드에서 대답

SELECT, work_dt, SEC_TO_TIME (SUM (TIMESTAMPDIFF (SECOND, 로그인, 로그 아웃)))로부터 을 time_worked으로는 ( 은 ((DateTime) MIN을 선택 ( 유착 로그인 로 work_dt 같은 EnNo 날짜 (DateTime) DateTime를 선택 에서 dataimport으로 b 어디 a.EnNo = b.EnNo 및 날짜 (a. DateTime) = 날짜 (b. DateTime) 및 b. DateTime> = a. DateTime 및 b. INOUT = 'E' ), 지금() AS 로그 아웃 발신 번호 dataimport 어디서?INOUT =의 '의 S' ) GROUP t으로 EnNo BY는이 당신이 찾고있는 무슨이다

Output

희망,

마지막으로 출력을 가지고 work_dt.