2013-04-30 3 views
2

테이블이 있는데, intimeouttime에 대한 datetime 필드가 있습니다.mysql 쿼리는 현재 행을 이전 행의 값으로 채 웁니다.

내가 원하는 것은 쿼리를 통해 테이블을 순환하고 이전 레코드 outtime으로 intime을 변경하는 것입니다.

이 방법은 내 데이터를 통해 일정한 흐름이 될 것없는 '시간 손실'

이미지가 아래에있는 내 현재 테이블과 내가 달성하고자을 보여줍니다.

enter image description here 현재이 예를 들어 바이올린을 찾을 수 있습니다 http://sqlfiddle.com/#!2/40b10/10

는 지금은 그냥이 작업을 진행하는 방법에 대한 논리를 찾고, 테이블 디자인 등이 최적이 아닌 것으로 알고 있습니다. 요약하면,

.

현재 inTime을 현재의 최신 시간 전에 최신 outtime과 동일하게 만드는 방법은 무엇입니까? 내가 뭘하려고 오전의 SOE 논리 아래지만 제대로 작동하지 않습니다

...

답변

1

ifnull 단지 올바르게 첫 intime을 표시하기 위해 필요합니다.

SELECT mov.vehicle, 
     ifnull((SELECT max(temp.outtime) 
       FROM movement temp 
       WHERE temp.outtime< mov.intime),mov.intime) as intime_calc, 
     mov.outtime 
FROM movement mov 
ORDER BY mov.intime 

http://sqlfiddle.com/#!2/40b10/23

당신이 intime 이미 이전 기록 outtime와 같은 일부 기록이있는 경우에 쿼리를 변경할 수 있습니다 :

SELECT mov.vehicle, 
     ifnull((SELECT max(temp.outtime) 
       FROM movement temp 
       WHERE temp.outtime<= mov.intime 
       AND mov.ID <> temp.ID),mov.intime) as intime_calc, 
     mov.outtime 
FROM movement mov 
ORDER BY mov.intime 
관련 문제