2013-04-25 3 views
4

에 의해 서비스 요청에 대한 평균 도착 간 시간을 얻을 내가 부분적으로 다음 MySQL의 스키마를 가지고타임 스탬프

ServiceRequests 
---------- 
id int 
RequestDateTime datetime 

이 기록의 전형적인 컬렉션처럼 보일 수 있습니다 것입니다. 이 경우

1 | 2009-10-11 14:34:22 
2 | 2009-10-11 14:34:56 
3 | 2009-10-11 14:35:01 

평균 요청 시간

14:34:22 ---> (34 seconds) ----> 14:34:56 ------> (5 seconds) -----> 14:35:01 

기본적 I가 연속 기록 시간 사이의 차이 합을 해결해야되고, (34 + 5)/2 = 19.5 초 기록의 수로 나눕니다.

제가 생각할 수있는 가장 가까운 것은 타임 스탬프를 시간으로 변환하고 거기에서 시작하는 것입니다. 필요한 경우 에포크 시간을 미리 계산하기 위해 표에 필드를 추가 할 수 있습니다.

SQL 문을 사용하여 19.5를 어떻게 결정합니까?

+1

아름다운 시작은 지금까지 시간 순서 – Bryan

+0

수행 연속 기록은 항상 연속이 시도한 쿼리를 보여주는 것입니다 신분증? – Barmar

+0

id 필드는 autoincremented이지만 레코드가 항상 n + 1이 아니기 때문에이 테이블이 부분적으로 지워지는 경우가 있습니다. 즉 일반적으로 1,2,4,7,8,9,367,368처럼 보입니다. 이 파이썬 코드가 있지만 그것을 표시 할 아무것도 없어 그래서 그것을 SQL에서 일을하고 싶습니다? –

답변

2

평균을 얻으려면 각 레코드의 시차를 알 필요가 없습니다. 당신은 어떤 지점 t0에서 t1에 이르는 x 개의 데이터 포인트를 가지고 있습니다. the last time - first time도 39 초입니다.(max-min)/(count-1)

select max(RequestDateTime)-min(RequestDateTime)/(count(id)-1) from ServiceRequests; 

주를 위해 작동합니다 : 테이블이 때문에 0으로 나누기로, 비어있는 경우이 작동하지 않습니다.

참고 2 : 다른 데이터베이스는 날짜 뺄셈을 다르게 처리하므로 그 차이를 초로 설정해야 할 수 있습니다.

힌트 : 어쩌면 TIMEDIFF 사용 (expr1을을, expr2이) 및/또는 TIME_TO_SEC (expr3를)

+0

고마워요! 나는 어딘가에 엔지니어링이 끝난 것 같아요. 지금은 내 요구 사항이 당신의 대답이 제시하는 것처럼 간단합니다. –