sql >> Database teknologi >  >> RDS >> Mysql

Besvær med variabel laglængde

I stedet for at sammenligne med annulleringsdatoen i den foregående række, skal du sammenligne med den seneste annulleringsdato i alle tidligere rækker. Standard SQL har muligheden IGNORE NULLS for at opnå dette, men MySQL understøtter det ikke. Heldigvis kan det i dit tilfælde omskrives ved hjælp af et kumulativt maks.:

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 violin



  1. SubSonic 3 og MySQL, fjernelse af understregning fra kolonnenavn i CleanUp()-metoden forårsager undtagelser ved brug af egenskab i linq-query

  2. Sådan lukkes dvale-session korrekt med mysql-server

  3. Hvorfor skalerer NoSql-databaser bedre end relationelle databaser? Hvordan skal jeg vælge mellem dem?

  4. MySQL:ALTER IGNORE TABLE TILFØJ UNIK, hvad vil blive afkortet?