sql >> Databasteknik >  >> RDS >> Sqlserver

Hitta på varandra följande datum inom ett definierat intervall där en tränare är tillgänglig att schemalägga

inte säker på hur detta kommer att fungera mot en större datamängd, men det ger rätt resultat för den tillhandahållna datamängden. Saknade datapunkter antas vara tillgängliga.

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. Automatisk ökningsproblem i Mysql

  2. Gå med i alla PostgreSQL-tabeller och skapa en Python-ordbok

  3. Hur man frågar summa föregående rad i samma kolumn med med pgSql

  4. SQL Server 2016:Skapa en tabell