Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź kolejne daty w określonym przedziale czasu, w których Trener jest dostępny do zaplanowania

nie masz pewności, jak to będzie działać w przypadku większego zestawu danych, ale uzyska prawidłowe wyniki dla podanego zestawu danych. Zakłada się, że brakujące punkty danych są dostępne.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz relację w SQL Server 2017

  2. Przesyłanie pliku z programu Access do SQL Server z kodem DAO — błąd wymagany obiekt

  3. Rzędy utrzymujące maksimum grupowe określonej kolumny (jak zabijać duplikaty...)

  4. Wyszukiwanie pełnotekstowe nie działa, jeśli dołączono słowo zatrzymania, mimo że lista słów zatrzymania jest pusta

  5. Automatycznie generuj wartość hierarchii