Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Schwierigkeit bei variabler Verzögerungslänge

Anstatt mit dem Stornierungsdatum in der vorherigen Zeile zu vergleichen, müssen Sie mit dem spätesten Stornierungsdatum in allen vorherigen Zeilen vergleichen. Standard-SQL hat eine IGNORE NULLS-Option, um dies zu erreichen, aber MySQL unterstützt sie nicht. Glücklicherweise kann es in Ihrem Fall mit einem kumulativen Max umgeschrieben werden:

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;

Siehe Fiddle