PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskiwanie maksymalnej sekwencyjnej passy ze zdarzeniami

Twój instynkt jest dobry, gdy patrzysz na rzędy z zerowymi zdarzeniami i pracujesz nad nimi. Możemy użyć podzapytania z funkcją okna, aby uzyskać „luki” między zerowymi dniami zdarzeń, a następnie w zapytaniu spoza niego pobrać żądany rekord, na przykład:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacja zapytań Postgres (wymuszenie skanowania indeksu)

  2. Jak zaktualizować PostgreSQL10 do PostgreSQL11 bez przestojów?

  3. Nie mogę wygenerować Hibernate Mapping Files i POJO z bazy danych PostgreSQL?

  4. Zwiększanie wydajności PostgreSQL dzięki HAProxy

  5. Jak mogę wstawić komentarze kolumn w PostgreSQL za pomocą Pythona?