Mysql
 sql >> база данни >  >> RDS >> Mysql

Отчитане на промените във времевата линия с MySQL

SET @last_task = 0;
SELECT SUM(new_task) AS tasks_performed
FROM (
  SELECT 
    IF(@last_task = RobotShortestPath, 0, 1) AS new_task,
    @last_task := RobotShortestPath
  FROM table
  ORDER BY ??
) AS tmp

Актуализация за множество таблици
От изглед за нормализиране на структурата на базата данни е по-добре с една таблица и да имате поле, идентифициращо коя колона какъв робот е, ако това не е възможно по някаква причина, можете да получите това чрез обединяване на таблиците:

SET @last_task = 0;
SELECT robot_id, SUM(new_task) AS tasks_performed
FROM (
  SELECT 
    IF(@last_task = RobotShortestPath, 0, 1) AS new_task,
    @last_task := RobotShortestPath
  FROM (
    SELECT 1 AS robot_id, robot_log_1.* FROM robot_log_1
    UNION SELECT 2, robot_log_2.* FROM robot_log_2
    UNION SELECT 3, robot_log_3.* FROM robot_log_3
    UNION SELECT 4, robot_log_4.* FROM robot_log_4
    UNION SELECT 5, robot_log_5.* FROM robot_log_5
  ) as robot_log
  ORDER BY robot_id, robot_log_id
) AS robot_log_history
GROUP BY robot_id
ORDER BY tasks_performed DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring Boot + docker-compose + MySQL:Връзката е отказана

  2. как да изберете произволни уникални записи при всяко изпълнение на SQL заявката

  3. системна команда mysql

  4. InnoDB или MyISAM - Защо не и двете?

  5. JDBC връзка – Class.forName срещу Class.forName().newInstance?