2016-07-27 2 views
1

쿼리를 작동시키는 데 도움이 필요하며 개념화하는 데 문제가 있습니다. 일반적으로 컴퓨터가 새로운 OS로 업그레이드하는 데 걸리는 시간을 빼고, 실패로 인한 시간 간격을 뺀 시간을 얻고 싶습니다. 테이블의경과 쿼리를 사용하여 경과 시간을 얻는 데 도움이 필요합니다.

예는 다음과 같습니다

timestamp     - status 

2016-07-19 14:25:59.000 Conversion In Progress 
2016-07-20 07:38:20.000 Failed - 04 
2016-07-26 07:15:59.000 Conversion In Progress 
2016-07-26 08:50:39.000 Conversion Successful 

당신은 그것을 다시 시작했다 때이 변환이 초기에 실패했을 때부터 큰 차이가하고 볼 수 있습니다. 보고 목적으로이 기간을 추가하는 것을 피하고 싶습니다. 내가 지금 사용

내 질문은 이것이다 : 로그에

SELECT ROUND(AVG((b.ts - a.ts)/60), 0) 
FROM 
(
SELECT mach_name, timestamp, UNIX_TIMESTAMP(timestamp)as ts FROM w10_migration_log where status = 'Conversion In Progress' 
)a INNER JOIN 
(
SELECT mach_name, timestamp, UNIX_TIMESTAMP(timestamp)as ts FROM w10_migration_log where status = 'Conversion Successful' 
) b on a.mach_name = b.mach_name 

대부분의 항목을 다루는 문제가되지 않습니다. 그게 중요할까요? 테이블 구조가 이러한 유형의 쿼리에 적합하지 않기 때문에

는 어떤 도움을 크게, 당신이 쿼리를 개념화 할 수없는 놀라운 일이 아니다

답변

0

을 감사합니다. 따라서 올바른 테이블 구조를 작성하여 시작해야합니다.

이 될 것이다 달성 하려는지에 대한 올바른 구조 :

| attempt_number | device | started_at | finished_at | status (success or failure) | 

쿼리는 매우 간단한 것와 것을 : 당신은 단지 각 시도에 대한 finished_atstarted_at 사이의 시간 차이의 합을 만들 수 각 (또는 주어진) 컴퓨터의.

이제 우리는 임시 테이블이나 뷰를 구조체 (또는 더 좋지만 리팩터링 한 테이블)와 유사하게 만든 다음 그 테이블에서 간단히 쿼리하는 것이 가장 좋습니다. 쿼리 더 많거나 적은 우리가 원하는보기를 구축 할 것입니다 이와 같은

: 다음

SELECT start.mach_name, start.timestamp as started_at, stop.timestamp as finished_at 
FROM w10_migration_log start 
join w10_migration_log stop ON stop.timestamp > start.timestamp and stop.mach_name = start.mach_name 
where start.status = 'Conversion In Progress' 
group by start.timestamp; 

를 매우 간단하게이 선택 :

select SEC_TO_TIME(SUM(UNIX_TIMESTAMP(finished_at) - UNIX_TIMESTAMP(started_at))) 
FROM (
    /* directly the previous query, or a view made from the previous query */ 
); 

을 나는 빠른 테스트를했고, 함께 18:47:01을 가지고 당신의 데이터 샘플.

+0

답장을 보내 주셔서 감사합니다. 귀하의 게시물은 의미가 있으며, 테이블을 만들지는 않았지만 변경 사항을 볼 수 있습니다. 관계없이 로그에 2 개 이상의 항목이 있다면 어떻게해야합니까? 우리는 5,6 + 번 실패한 기계를 가지고 있습니다. 이 시나리오에서는 작동하지 않는 것 같습니다. – spas2k

+0

@ spas2k 무엇이 작동하지 않습니까? 시도마다 하나의 행을 제안하므로 2 또는 6 또는 20이 정확히 동일하게 작동해야합니다. – rlanvin

관련 문제