1

営業日をカウントできるカレンダーテーブルがあります。私が実行する最も基本的なクエリは次のようになります。

SELECT SUM(calD.busDay) [Sum Of Days]
FROM [dbo].[CalendarDays] calD 
WHERE calD.calDay BETWEEN '1/1/2016' AND '1/3/2016'

元旦は営業日ではありませんが、2日目と3日目は営業日[Sum Of Days] = 2です。

ただし、これを次のような相関サブクエリに入れると、出力の一貫性が失われます。

SELECT c2.*,
    (SELECT SUM(calD.busDay) [Sum Of Days]
    FROM [dbo].[CalendarDays] calD 
    WHERE calD.calDay BETWEEN c2.[thisDate] AND c2.[Next Date]) [Days In Step]
FROM
    (SELECT c.*,
        CASE WHEN LEAD(c.[ID], 1) OVER (ORDER BY c.[ID], c.[thisDate]) = c.[ID]
            THEN LEAD(c.[thisDate], 1) OVER (ORDER BY c.[ID], c.[thisDate])
            ELSE NULL END [Next Date]
FROM [dbo].[tbl_Test] c ) c2

小さなデータセットでの私の結果は次のとおりです。

テストデータ

7列目が目立ちます。2 つの日付の間に 173 日が経過したと表示されますが、クエリ Select を実行して明示的な日数を指定すると、174 日になります。行 8 も奇妙です。明らかに 2 つの日付がありますが、NULL として返されます。

ここで何が起こっているのか本当にわかりません。

4

0 に答える 0