Jest w tym pewien trik. Jeśli od dat odejmiesz rosnącą sekwencję liczb, będą one stałe dla dat, które są sekwencyjne. Możemy następnie użyć tego do zdefiniowania grup dla każdego programisty.
select developer, max(numdays) as maxseq
from (select developer, grp, min(MRDate) as MR_start, max(MRDate) as MR_end,
count(distinct MRDate) as numdays
from (select t.*,
(MRDate - dense_rank() over (partition by developer order by date)) as grp
from t
) t
group by developer, grp
) t
group by developer;
Jeśli wiesz, że istnieje co najwyżej jeden rekord na datę, możesz użyć row_number()
zamiast dense_rank()
i count(*)
zamiast count(distinct MRDate)
.