Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Trova date consecutive entro un intervallo definito in cui un Trainer è disponibile per la pianificazione

non sono sicuro di come funzionerà rispetto a un set di dati più ampio, ma ottiene i risultati corretti per il set di dati fornito. Si presume che i punti dati mancanti siano disponibili.

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