यह सुनिश्चित नहीं है कि यह एक बड़े डेटा सेट के विरुद्ध कैसा प्रदर्शन करेगा, लेकिन यह प्रदान किए गए डेटा सेट के लिए सही परिणाम प्राप्त करता है। अनुपलब्ध डेटा बिंदु उपलब्ध माने जाते हैं।
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