sql >> Database >  >> RDS >> Mysql

Moeite met variabele lag-lengte

In plaats van te vergelijken met de annuleringsdatum in de vorige rij, moet u vergelijken met de laatste annuleringsdatum in alle voorgaande rijen. Standaard SQL heeft een IGNORE NULLS-optie om dit te bereiken, maar MySQL ondersteunt dit niet. Gelukkig kan het in jouw geval worden herschreven met een cumulatief maximum:

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;

Zie viool



  1. Kunnen we meerdere WITH AS hebben in één sql - Oracle SQL?

  2. SQL Server-query:snel met letterlijk maar traag met variabelen

  3. Time-out verlopen pgadmin Kan geen verbinding maken met de server

  4. Proactieve SQL Server Health Checks, Deel 1:Schijfruimte