sql >> Databáze >  >> RDS >> Sqlserver

Najděte po sobě jdoucí data v rámci definovaného rozpětí, kde je k dispozici trenér

nejsem si jistý, jak to bude fungovat ve srovnání s větší sadou dat, ale pro poskytnutou sadu dat to dostane správné výsledky. Předpokládá se, že chybějící datové body jsou dostupné.

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. Použití SSL s SQLAlchemy

  2. Nelze najít microsoft.sqlserver.batchparser.dll

  3. Musí být seskupené indexy jedinečné?

  4. Jak a proč přidat primární klíče do tabulky databáze SQL, když už mám index