У меня проблемы с тем, чтобы разобраться с этим.
Я ищу один запрос, если это возможно, при запуске PostgreSQL 9.6.6 под pgAdmin3 v1.22.1
У меня естьтаблица с датой и строкой для каждого события в дате:
Date Events
2018-12-10 1
2018-12-10 1
2018-12-10 0
2018-12-09 1
2018-12-08 0
2018-12-07 1
2018-12-06 1
2018-12-06 1
2018-12-06 1
2018-12-05 1
2018-12-04 1
2018-12-03 0
Я ищу самую длинную последовательность дат без перерыва.В этом случае 2018-12-08
и 2018-12-03
являются единственными датами без событий, есть две даты с событиями между 2018-12-08
и today
и четыре между 2018-12-8
и 2018-12-07
- поэтому я бы хотелответ 4.
Я знаю, что могу сгруппировать их с помощью чего-то вроде:
Select Date, count(Date) from Table group by Date order by Date Desc
Чтобы получить только самую последнюю последовательность, у меня есть что-то вроде этого - subquery
возвращает самую последнюю дату без событий, а внешний запрос подсчитывает даты после этой даты:
select count(distinct date) from Table
where date>
( select date from Table
group by date
having count (case when Events is not null then 1 else null end) = 0
order by date desc
fetch first row only)
Но теперь мне нужна самая длинная полоса, а не только самая последняя полоса.
Спасибо!