2012-08-02 43 views
0

下面是data表:PHP MySQL的 - 由速度指定跟蹤的車輛狀態,MOVE STOP START

/* TableName:Data */ 
    id | speed 
---------------- 
    1 | 3 
    2 | 0 
    3 | 0 
    4 | 5 
    5 | 6 
    6 | 7 
    7 | 0 
    8 | 0 
    9 | 0 
    10 | 3 
    N | 2 

我想有一個結果(與出重複零速度),並指定移動的狀態; 例如:

如果第一速排爲零Remove it from resultstate=START/MOVE
否則顯示如果速度是零上第一行後,移動狀態,那麼設置state=STOP
如果速度是重複與Remove it from result
零後零值速度值如果速度不爲零則設置state=START

示例結果:

 /* Results */ 
    id | speed | status 
------------------------- 
    1 | 3  | START/MOVE 
    2 | 0  | STOP 
    4 | 5  | START 
    5 | 6  | MOVE 
    6 | 7  | MOVE 
    7 | 0  | STOP 
    10 | 3  | START 
    N | 2  | MOVE 

回答

1
SELECT  a.*, 
      CASE WHEN @val IS NULL THEN @val:='START/MOVE' 
       WHEN speed = 0 AND @val IN ('START/MOVE', 'START', 'MOVE') THEN @val:='STOP' 
       WHEN speed > 0 AND @val = 'STOP' THEN @val:='START' 
       WHEN speed > 0 AND @val IN ('START', 'MOVE') THEN @val:='MOVE' 
      END AS status 
FROM  (
      SELECT a.* 
      FROM  data a 
      LEFT JOIN (
        SELECT MIN(id)-1 AS id, 0 AS speed 
        FROM data 

        UNION ALL 

        SELECT id, speed 
        FROM data 
        ) b ON a.id = b.id + 1 AND (a.speed,b.speed) IN ((0,0)) 
      WHERE  b.id IS NULL 
      ) a 
CROSS JOIN (SELECT @val:=NULL) val_init 

測試和工作。

我會展示一個SQLFiddle演示,但不幸的是,他們的網站目前處於關閉狀態。

+0

謝謝,太棒了;) – Root125 2012-08-02 14:00:08