Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zliczanie zmian na osi czasu za pomocą 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

Aktualizacja dla wielu tabel
Z widoku normalizacji struktury bazy danych, lepiej z jedną tabelą i polem identyfikującym, która kolumna jest jakim robotem, jeśli z jakiegoś powodu nie jest to możliwe, możesz to uzyskać przez połączenie tabel:

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. Jakie są limity połączeń dla Google Cloud SQL z App Engine i jak najlepiej ponownie wykorzystać połączenia z bazą danych?

  2. Czy można użyć wyniku funkcji SQL jako pola w Doctrine?

  3. Wybór pływaka w MySQL

  4. Czy można używać IF(cond1 AND cond2,result, else wynik) w MySQL?

  5. Jak WYBRAĆ dwie kolumny, gdzie jedna kolumna musi być DISTINCT?