2017-08-06 7 views
1

私は解決方法がわからないという問題に直面しています。SQL Serverで差別日を取得するにはどうすればよいですか?

2つの値の間に3日間の差異を取得したいと考えています。

SELECT 
    BeginRange, EndRange, 
    DATEDIFF(DAY,InicioRange , FimRange) as DifferenceDays, 
    Code 
FROM 
    (SELECT 
     MAX(DataTransacao) OVER (ORDER BY DataTransacao) BeginRange, 
     LEAD(DataTransacao) OVER (ORDER BY DataTransacao) EndRange, 
     Code 
    FROM 
     #Relatorio1  
    WHERE 
     Code = '000008480700001') AS C 
WHERE 
    c.EndRange > c.BeginRange 
    -- AND datediff(day,BeginRange, EndRange) >= 3 
ORDER BY 
    DifferenceDays, Code 

結果::しかし、私は、クエリフィルタに一つの値を行うとき、私は結果だ

BeginRange EndRange DifferenceDays Code 
------------------------------------------------------- 
20170601 20170602 1    000008480700001 
20170602 20170605 3    000008480700001 

をしかし、私はフィルタなしでクエリを実行すると、私は上記の結果を得ることはありません。

SELECT 
    BeginRange, EndRange, 
    DATEDIFF(DAY,InicioRange , FimRange) as DifferenceDays, 
    Code 
FROM 
    (SELECT 
     MAX(DataTransacao) OVER (ORDER BY DataTransacao) BeginRange, 
     LEAD(DataTransacao) OVER (ORDER BY DataTransacao) EndRange, 
     Code 
    FROM 
     #Relatorio1) AS C 
WHERE 
    c.EndRange > c.BeginRange 
    -- AND datediff(day,BeginRange, EndRange) >= 3 
ORDER BY 
    DifferenceDays, Code; 

結果

NOTHING私が間違っているのは何

?私は最初のクエリで得た最初の結果を得ることができません。

答えて

0

あなたの質問は従うことが少し難しいですが、私はあなただけpartition by必要があると思う:すべてのための

SELECT BeginRange, EndRange, 
     DATEDIFF(DAY,InicioRange , FimRange) as DifferenceDays 
     Code 
FROM (SELECT MAX(DataTransacao) OVER (PARTITION BY Code ORDER BY DataTransacao) as BeginRange, 
      LEAD(DataTransacao) OVER (PARTITION BY Code ORDER BY DataTransacao) as EndRange, 
      Code 
     FROM #Relatorio1 

    ) C 
WHERE c.EndRange > c.BeginRange 
-- AND datediff(day,BeginRange, EndRange) >= 3 
ORDER BY DifferenceDays, Code; 
+0

感謝を! これはまさに私が探しているものです。 本当にありがとうございます! もう一度ありがとう! – Luiz

関連する問題