sql >> データベース >  >> RDS >> Sqlserver

トレーナーがスケジュールできる定義された期間内の連続した日付を見つける

    これがより大きなデータセットに対してどのように機能するかはわかりませんが、提供されたデータセットに対して適切な結果が得られます.欠落しているデータ ポイントは利用可能であると見なされます。

    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. MySQLで行数が異なる2つのテーブルを結合するにはどうすればよいですか?

    2. SQLServer2005の数値精度の低下

    3. mysqlデータベースの行ごとに一意のphpページを作成するにはどうすればよいですか?

    4. SQL ServerのLEFT()とSUBSTRING():違いは何ですか?