2017-03-14 2 views
0

の助けを借りて週末を無視した日から二日間。次のような構造は、次のとおりです。減算私はカレンダーとして機能<em>DateView</em>というビューを持つビュー

Date  | Date_Previous | Date_Following | Weekday 
20170314 | 20170313  | 20170315  | Tu 
...  | ...   | ...   | ... 

私は(この図の助けを借りて)指定された日付とを持っている土曜日と日曜日を無視して、指定した日付から2日を減算する必要があります。

試験日20170314のための私の現在のアプローチは次のようになります。

SELECT TOP 2 Date 
FROM DateView d 
WHERE d.Weekday NOT IN ('Sa', 'So') 
    AND d.Date < '20170314' 
ORDER BY d.Date DESC 

結果がこれです:

Date 
2017-03-13 
2017-03-10 

しかし、私は唯一の第二列を取得する必要があり、それは、あります2017-03-10。

Date 
1990-01-01 
1990-01-02 

私は唯一の第二列を選択するに達成することができます方法:ビューは、1990年1月1日から始まるので、したがって、私はORDER BY d.date ASCからORDER BY d.Date DESCを変更することにより、ソート順序を逆にしようとしたが、これは、以下の結果が得られます上記の最初の結果から?理想的には、解決策は含まれていませんROW_NUMBER() over (order by ...)についてどのよう

答えて

1

: - あなたのアカウントにのみSUNとSATを取る必要があるとき

Select min(Date) from 
(SELECT TOP 2 Date 
FROM DateView d 
WHERE d.Weekday NOT IN ('Sa', 'So') 
    AND d.Date < '20170314' 
ORDER BY d.Date DESC); 
0

それは2日間非常に簡単です。あなたはDateViewせずに目標を達成することができます

DECLARE @Date DATETIME = '2017-03-14' 

SELECT DATEADD(day, 
    CASE DATENAME(weekday, @Date) 
     WHEN 'TUESDAY' THEN -4 
     WHEN 'WEDNESDAY' THEN -4 
     WHEN 'SUNDAY'  THEN -3 
     ELSE -2 
    END, @Date) AS TwoBusinessDaysSubstractedDate 

は、私はまた、7日以上受け入れ範囲と法定休日だけでなく、週末を考慮し、より汎用的なソリューションを提供することができます。

関連する問題