2017-12-10 2 views
0

나는 times 테이블을 가지고 있습니다. 모든 센서에 대해 기본 키와 모든 시간 차이를 제공하는보기를 만들고 싶습니다.그룹의 MySQL 데이터베이스 시간 차이점

센서는 경작 있습니다

0. start 
1-3. on track timers 
4. end 

예는 최고의 표시됩니다 :

Times table: 
---------------------------------------------------------- 
| TimeID | RaceID | RacerID | Round | Sensor | Time | 
----------------------------------------------------------- 
| 1 | 1 | 1 | 1 | 0 | 100540 | 
----------------------------------------------------------- 
| 2 | 1 | 2 | 1 | 0 | 154297 | 
----------------------------------------------------------- 
| 3 | 1 | 1 | 1 | 1 | 170134 | 
----------------------------------------------------------- 
| 4 | 1 | 2 | 1 | 1 | 185915 | 
----------------------------------------------------------- 
| 5 | 1 | 1 | 1 | 2 | 200137 | 
----------------------------------------------------------- 
| 6 | 1 | 2 | 1 | 2 | 235103 | 
----------------------------------------------------------- 
| 7 | 1 | 1 | 1 | 4 | 38| 
----------------------------------------------------------- 
| 8 | 1 | 2 | 1 | 4 | 421127 | 
----------------------------------------------------------- 

Desired view 
----------------------------------------------------------------------- 
| TimeID | RaceID | RacerID | Round | Time1 | Time2 | Time3 | Total | 
----------------------------------------------------------------------- 
| 1 | 1 | 1 | 1 | 69594 | 99597 | null | 279583 | 
----------------------------------------------------------------------- 
| 1 | 1 | 2 | 1 | 31618 | 80806 | null | 266830 | 
----------------------------------------------------------------------- 

http://sqlfiddle.com/#!9/10c5f/1

답변

1

내가 제대로 이해하면, 단지 left join의 일련의 사용

SELECT t0.timeID , t0.raceID, t0.racerID, t1.time - t0.time as 'Time 1', 
t2.time - t1.time as 'Time 2', t3.time - t3.time as 'Time 3', t4.time - t0.time as 'Total' 
FROM time t0 left join 
time t1 on t0.racerID = t1.racerID and t1.sensor = 1 left join 
time t2 on t0.racerID = t2.racerID and t2.sensor = 2 left join 
time t3 on t0.racerID = t3.racerID and t3.sensor = 3 left join 
time t4 on t0.racerID = t4.racerID and t4.sensor = 4 
where t0.sensor = 0 
+0

이 솔루션은 definitly 작동하지만,이 효과가 있습니까? raceID, racerID 및 round (인덱스 할 수 있다고 생각 했음)를 확인해야합니다. – Akxe

+0

'racerID' 및'sensor' 필드에 인덱스를 지정하면 DB에서 인덱스를 사용할 수 있으므로 인덱싱에는 문제가 없습니다. 왜 그렇게 효율적이지 않다고 생각하니? –

+0

필자는 예라고 생각합니다. 효율성에 관해서는 하나의 테이블 만 사용하기 때문에 충분히 효율적입니다. – Akxe

0

당신은 동적으로 열을 추가 할 수 없습니다, 그래서 중 당신이 시간 1이 무엇이 지정해야 Time1을 SELECT 절의 집계 함수 식에서 표현하고 원하는 모든 값을 나타냅니다. 이후로는 수행 할 수 없을 수도 있습니다. 다른 가치들과의 관계를 표현한다. MIN 또는 MAX는 가까워 질 수 있지만 "두 번째 최소"또는 "두 번째 가장 큰"값은 개별적으로 집계 된 다른 값과의 관계를 의미하기 때문에 표현할 수 없습니다.

GROUP_CONCAT을 고려해 볼 수 있습니다. GROUP_CONCAT은 사용자가 원하는 것과 가장 근접한 것으로 추정됩니다.

관련 문제