sql >> Databáze >  >> RDS >> PostgreSQL

Získání maximálního sekvenčního sledu událostí

Váš instinkt je dobrý, když se díváte na řádky s nulovými událostmi a pracujete na nich. Můžeme použít poddotaz s funkcí okna, abychom získali „mezery“ mezi dny s nulovou událostí, a pak v dotazu mimo něj převezmeme požadovaný záznam, například takto:

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. Rychlejší načítání velkých dat

  2. Chyba PG se nelze připojit k serveru:Připojení odmítnuto Běží server na portu 5432?

  3. MacOSX:automatické spuštění mysql při spouštění

  4. Existuje vzorec pro odhad velikosti indexu v InnoDB?