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

Трудност с променлива дължина на забавяне

Вместо да сравнявате с датата на анулиране в предишния ред, трябва да сравните с последната дата на анулиране във всички предишни редове. Стандартният SQL има опция IGNORE NULLS, за да постигне това, но MySQL не я поддържа. За щастие във вашия случай може да се пренапише с кумулативен макс:

select t.*,
       datediff(start, prev_cancelled) as num_days_since_cancel
from (select dt.*,
             max(cancelled) over -- latest date per id
             (partition by id 
              order by start
              rows between unbounded preceding and 1 preceding) as prev_cancelled
      from dt
     ) t
-- remove negative duration
where datediff(start, prev_cancelled) >= 0;

Вижте цигулка



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-ефективният начин за получаване на броя на редовете в таблицата

  2. Не разбирам защо моята променлива е NULL

  3. Свързване на django и mysql контейнери с помощта на docker-compose

  4. Извличане на йерархия родител-дете от самореферираща се mysql таблица

  5. Във Flask-migrate ValueError:невалиден синтаксис на интерполация в низ за връзка на позиция 15