sql >> Databasteknik >  >> RDS >> Mysql

Svårighet med variabel laglängd

Istället för att jämföra med avbokningsdatumet i föregående rad måste du jämföra med det senaste avbokningsdatumet i alla föregående rader. Standard SQL har alternativet IGNORE NULLS för att uppnå detta, men MySQL stöder det inte. Lyckligtvis i ditt fall kan det skrivas om med ett 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;

Se fiol



  1. skapa tabellbegränsning i mysql

  2. Visa varje DISTINCT-fältvärde endast en gång med loop

  3. Minska dina databasvärdkostnader:DigitalOcean vs. AWS vs. Azure

  4. MYSQL GROUP BY och ORDER BY fungerar inte tillsammans som förväntat