sql >> Database teknologi >  >> RDS >> Mysql

Tæller ændringer i tidslinjen med 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

Opdatering for flere tabeller
Fra en standardiseringsvisning af databasestruktur, er det bedre med én tabel, og få en fil, der identificerer hvilken kolonne, hvilken robot, hvis det af en eller anden grund ikke er muligt, kan du få det ved at samle tabellerne:

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. Rows_sent:12 Rows_examined:549024 - hvordan optimerer man mySQL-forespørgslen?

  2. Ordliste over SQL Server-forespørgsler — A Stick Shift for DBA'er

  3. MySQL optimering af kæmpe bord

  4. Indeks en MySQL-database med Apache Lucene, og hold dem synkroniserede