PHP MySQL - 按速度指定跟踪车辆状态,MOVE STOP START

标签 php mysql

下面是数据表:

/* 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/

相关文章:

php - 反转字符串中元音的位置

mysql - INNER 加入时间太长

CASE 附近的 MySQL 无法识别的关键字

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - 在 MVC 环境中使用 ORM 有充分的理由吗?

sql - mySQL order by clause奇怪的问题

mysql - 从同一个表中选择计数返回不同的数字

php - 在 Laravel 4 中使用具有 Eloquent 关系的缓存标签

php - Codeigniter - 路由到 Controller (如果存在),如果不存在则使用默认值

php - 在 PHP 中使用 DOMDocument 进行缩进