下面是数据
表:
/* 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
我想要一个结果(不重复零速),并指定移动状态; 示例:
如果第一个速度行为零将其从结果中删除
,否则显示state=START/MOVE
如果移动状态后第一行的速度为零,则设置 state=STOP
如果速度重复为零值将其从结果中删除
速度为零后如果速度不为零则设置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
最佳答案
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 演示,但不幸的是,他们的网站目前已关闭。
关于PHP MySQL - 按速度指定跟踪车辆状态,MOVE STOP START,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11775045/