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

MySQL, jak uzyskać sumę dat rozpoczęcia/zakończenia z możliwymi nakładającymi się datami

Użyj zmiennej, aby ustalić zakresy przed agregacją sum

Demo SQL

SELECT t.`fk_id`,
       @rn := if(@id = `fk_id`, 
                 @rn + 1, 
                 if(@id:=`fk_id`, if(@end:='1900-01-01 00:00:00',1,1), if(@end:='1900-01-01 00:00:00',1,1))   
                ) as rn,
       if(start < @end, 
          @end, 
          if(@end := end, `start`, `start`) 
         ) as `start`, 
       end
FROM Table1 t
CROSS JOIN (SELECT @id := 0, @end := STR_TO_DATE('1900-01-01 00:00:00', '%Y-%m-%d %H:%i:%s') as e, @rn := 0) t
ORDER BY `fk_id`, `start`

WYJŚCIE




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:SELECT i COUNT w tym samym zapytaniu

  2. MySQL:przekroczono limit czasu oczekiwania na blokadę

  3. Wybieranie ostatniego rekordu z INNER JOIN i grupowanie

  4. Dlaczego warunek IN miałby być wolniejszy niż =w sql?

  5. Entity Framework — MySQL — problem z formatem daty i godziny