問題: 曜日 (1、2、3、4、5、6、7)、開始日、および終了日を指定して、開始日と終了日の間に指定された曜日が出現する回数を計算します。売上がなかった日を含まない日。
環境:
テーブル「Ticket」の構造とサンプル コンテンツは次のとおりです。
i_ticket_id c_items_total dt_create_time dt_close_time
----------------------------------------------------------------------------
1 8.50 '10/1/2012 10:23:00' '10/1/2012 11:05:05'
2 10.50 '10/1/2012 11:00:00' '10/1/2012 11:45:05'
3 8.50 '10/2/2012 08:00:00' '10/2/2012 09:25:05'
4 8.50 '10/4/2012 08:00:00' '10/4/2012 09:25:05'
5 7.50 '10/5/2012 13:22:23' '10/5/2012 14:33:27'
.
.
233 6.75 '10/31/2012 23:20:00' '10/31/2012 23:55:39'
詳細
1 か月に 1 日以上のチケットがある場合とない場合があります。(つまり、その場所はその日/その日/秒閉鎖されました)
定休日は不定休です。予測可能なパターンはありません。
2 つの日付間の Get number of weekdays (Sundays, Mondays, Tuesdays) SQLに基づいて、開始日と終了日の間に特定の曜日が発生する回数を返すクエリを導き出しました。
DECLARE @dtStart DATETIME = '10/1/2013 04:00:00'
DECLARE @dtEnd DATETIME = '11/1/2013 03:59:00'
DECLARE @day_number INTEGER = 1
DECLARE @numdays INTEGER
SET @numdays = (SELECT 1 + DATEDIFF(wk, @dtStart, @dtEnd)-
CASE WHEN DATEPART(weekday, @dtStart) @day_number THEN 1 ELSE 0 END -
CASE WHEN DATEPART(weekday, @dtEnd) <= @day_number THEN 1 ELSE 0 END)
ここで、ゼロドルの日がカウントに含まれないように、これをフィルタリングする必要があります。チケット テーブルの内容に基づいてこのフィルターを追加するために提供できるヘルプは、大歓迎です!