sql >> Database >  >> RDS >> Sqlserver

Zoek opeenvolgende datums binnen een gedefinieerde periode waar een Trainer beschikbaar is om te plannen

niet zeker hoe dit zal presteren tegen een grotere dataset, maar het krijgt de juiste resultaten voor de verstrekte dataset. Ontbrekende datapunten worden verondersteld beschikbaar te zijn.

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


  1. ORA-00904 Ongeldige identifier” voor een identifier in een group by-clausule

  2. ODBC-oproep mislukt met opgeslagen procedure - Doorzoek query

  3. ora-00972 identifier is te lang orakel 10g

  4. pg_dump tabelvolgorde negeren?