sql >> Databasteknik >  >> RDS >> PostgreSQL

Få maximal sekventiell streak med händelser

Din instinkt är bra att titta på raderna med noll händelser och arbeta bort dem. Vi kan använda en underfråga med en fönsterfunktion för att få "gap" mellan noll händelsedagar, och sedan i en fråga utanför tar den posten vi vill ha, som så:

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. JSON_PRETTY() – Formatera JSON-dokument för enklare läsbarhet i MySQL

  2. Bästa mysql-datatypen för gram, milligram, mikrogram och kilojoule

  3. Varför kommer NULL-värden först när man beställer DESC i en PostgreSQL-fråga?

  4. Programmatiskt hämta SQL Server lagrad procedur källa som är identisk med källan som returneras av SQL Server Management Studio gui?