2012-03-06 5 views
-24

I는 다음과 같습니다 테이블이 있습니다다른 열에서 값에 대한 상호 참조 하나 열에서 두 값의 차이를 찾는 방법

id | machine | date | status 
---------------------------- 
1 | 1 | 01-01-2009 | New 
1 | 1 | 01-01-2010 | Busted 
1 | 2 | 01-01-2010 | New 
1 | 1 | 01-01-2012 | Repaired 

내가 기계 PER 각 상태 사이의 날짜의 차이를 알 필요가 는 가장 최근의 상태가 그 기계에 대한 새로운 상태가없는 경우,이 나열된 마지막 날짜와 현재 날짜 사이의 차이를 보여줄 필요가있다 :

id | machine | date | status | duration 
--------------------------------------- 
1 | 1 | 01-01-2009 | New  | 1 year 
1 | 1 | 01-01-2010 | Busted | 2 years 
1 | 2 | 01-01-2010 | New  | 2 years, 2 months, 5 days 
1 | 1 | 01-01-2012 | Repaired | 2 months, 5 days 

은 매우 정직하기를, 난 몰라 새 기간 열에 날짜 사이의 거리가 표시되는 방식에주의하십시오. 나는이 쿼리를 직접 만들려고 시도했지만 실패했다.

+0

당신이 MySQL의에서이 작업을 수행하거나 당신이 등 PHP, PERL, 루비, 함께 할 수 있습니까? –

답변

3

가장 쉬운 방법은 각 기계의 마지막 두 레코드를 얻은 다음 코드에서 날짜 (간단한 빼기)를 비교하여 차이를 찾는 것입니다.

난 당신이 날짜를 저장하는 방식을 변경, 당신이있을 수 있습니다 날짜별로 정렬하려면

(각 시스템의 마지막 두 얻기 위해) 두 개체와 GROUP BY를 사용하는 방법을 설명하는 this article을 발견했다. Unix Timestamp를 사용하는 것이 일반적입니다.

7

이 일에 당신에게 가치를 줄 것이다 -

SELECT *, DATEDIFF(IFNULL((SELECT `date` FROM machine_status ms2 WHERE ms1.machine = ms2.machine AND ms1.`date` < ms2.`date` ORDER BY `date` ASC LIMIT 1), CURRENT_DATE), ms1.`date`) 
FROM machine_status ms1; 
관련 문제