sql >> Database >  >> RDS >> PostgreSQL

Maximale sequentiële streak krijgen met gebeurtenissen

Je instinct is goed om naar de rijen met nul gebeurtenissen te kijken en ze uit te werken. We kunnen een subquery met een vensterfunctie gebruiken om de "gaten" tussen nul gebeurtenisdagen te krijgen, en dan in een query daarbuiten het record nemen dat we willen, zoals zo:

select * 
from (
  select date as day_after_streak
   , lag(date) over(order by date asc) as previous_zero_date 
   , date - lag(date) over(order by date asc) as difference
   , date_part('days', date - lag(date) over(order by date asc) ) - 1 as streak_in_days
  from dates

  group by date
  having sum(events) = 0 ) t 
where t.streak_in_days is not null
order by t.streak_in_days desc
limit 1



  1. Hoe maak ik met PHP een database aan als deze nog niet bestaat?

  2. Python:niet-ondersteund formaatteken ''' (0x27) bij index 350

  3. Hoe voeg ik AUTO_INCREMENT toe aan een bestaande kolom?

  4. ALS bestaat, update dan MySQL