Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Dificuldade com comprimento de atraso variável


Em vez de comparar com a data de cancelamento na linha anterior, você precisa comparar com a data de cancelamento mais recente em todas as linhas anteriores. O SQL padrão tem uma opção IGNORE NULLS para conseguir isso, mas o MySQL não a suporta. Felizmente, no seu caso, pode ser reescrito usando um Cumulative Max:
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;

Consulte violino