Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Trouver des dates consécutives dans une période définie où un formateur est disponible pour planifier

Je ne sais pas comment cela fonctionnera par rapport à un ensemble de données plus important, mais il obtient les bons résultats pour l'ensemble de données fourni. Les points de données manquants sont supposés être disponibles.

declare @startDate datetime, @endDate datetime, @days int
select @startDate = '6/1/2013', @endDate='6/3/2013', @days=2

select trainer, min(date)
from
    (
    select  trainer,date,
            (select top 1 date
            from mySchedule sInner
            where sInner.date > sOuter.date
                    and sInner.trainer = sOuter.trainer
                    and sInner.Dirty = 1    
                    and sInner.date between @startDate and @endDate
            order by sInner.date) as nextDirtyDate
    from    mySchedule sOuter
    where sOuter.dirty=0
            and sOuter.date between @startDate and @endDate
    ) sub
group by trainer, nextDirtyDate
having dateDiff(d, min(date), isNull(nextDirtyDate,dateAdd(d,1,@endDate))) >= @days