0

カレンダーテーブルがあります。休日と週末をスキップして、今日の日付の前に2つのビジネスを取得したいと思います。

例えば:

例1:2013年の正月は火曜日です。木曜日(1/3)の場合、開始日は月曜日(12/31)になります。

例2:月曜日(12/31)の場合、開始日は木曜日(12/27)になります。

私のClandarテーブルには、30年分の日付が事前に入力されており、週末と休日を判別するためのフラグがあります。テーブルには次のフィールドがあります。

dt:30年間の日付と時刻Y:年D:日M:月Isholiday :(休日はそうではありません。「いいえ」の場合は0、「はい」の場合は1のフラグが付けられます)IsWeekday :(平日ですか?0のフラグが付けられます「いいえ」の場合は1、「はい」の場合は1 HolidayDescritption:休日の名前

助けてください。

4

2 に答える 2

1

これを試してください:

SELECT dt FROM
(
    SELECT dt, ROW_NUMBER() OVER (ORDER BY dt DESC) AS R
    FROM
        Calendar
    WHERE
        IsHoliday = 0
        AND IsWeekday = 1
        AND dt < GETDATE()
) T
WHERE R = 2
于 2012-11-02T17:59:45.647 に答える
1

This is what you want :

select top 1 *
  from ( select * 
           from Calendar 
          where IsHoliday = 0 
            and IsWeekday = 1 
            and dt between DateAdd( Day, -6, GetDate ) and GetDate() 
       ) tmpCalendar
 where dt <= DateAdd( Day, -2, GetDate() )
 order by dt desc

Make sure to replace * with only the fields that you want.

于 2012-11-02T16:52:16.120 に答える