sql >> Databáze >  >> RDS >> Mysql

Obtížnost s proměnnou délkou zpoždění

Místo porovnávání s datem zrušení v předchozím řádku musíte porovnat s posledním datem zrušení ve všech předchozích řádcích. Standardní SQL má k dosažení tohoto cíle možnost IGNORE NULLS, ale MySQL ji nepodporuje. Naštěstí ve vašem případě jej lze přepsat pomocí kumulativního maxima:

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;

Viz fiddle



  1. PHP MySQL - pro každých 6 řádků vložit div?

  2. Přesunout data SQL z jedné tabulky do druhé

  3. Vytváření proměnné pole v MySQL

  4. Vytvořte sloupec automatického zvýšení v SQLite