2017-10-09 9 views
1

こんにちは私は、各顧客の最後の注文からの日数を示すSQLでウィンドウ化されたクエリを作成しようとしています。SQL LAG最後の注文からの日数

enter image description here

今では私に各注文の間で日を示しています。

は、私はそれが最後と顧客ごとの前回のオーダーからの日数を示し持っている私のクエリに変更するには何が必要ですか?これで、顧客が注文したすべての注文に表示されます。

問合せ:

SELECT klantnr,besteldatum, 
     DATEDIFF(DAY,LAG(besteldatum) OVER(PARTITION BY klantnr ORDER BY besteldatum),besteldatum) AS DaysSinceLastOrder 
FROM bestelling 
GROUP BY klantnr,besteldatum; 
+2

スクリーンショットではなくクエリをここに貼り付けてください。 *今日*または他の日付までの最後の注文以来 – Mureinik

+0

日? –

答えて

2

あなたは、各klantnrためbesteldatumで行を注文するrow_number()を使用して、派生テーブル(サブクエリ)またはcommon table expressionを使用して、最新の2を返すことができます。

派生テーブルのバージョン:

select klantnr, besteldatum, DaysSinceLastOrder 
    from (
    select klantnr, besteldatum 
     , DaysSinceLastOrder = datediff(day,lag(besteldatum) over (partition by klantnr order by besteldatum),besteldatum) 
     , rn = row_number() over (partition by klantnr order by besteldatum desc) 
    from bestelling 
    group by klantnr, besteldatum 
) t 
where rn = 1 

common table expressionバージョン:あなたは顧客ごとに1行を、必要な場合

;with cte as (
    select klantnr, besteldatum 
    , DaysSinceLastOrder = datediff(day,lag(besteldatum) over (partition by klantnr order by besteldatum),besteldatum) 
    , rn = row_number() over (partition by klantnr order by besteldatum desc) 
    from bestelling 
    group by klantnr, besteldatum 
) 
select klantnr, besteldatum, DaysSinceLastOrder 
from cte 
where rn = 1 

rn = 1が適切なフィルタです。最新の行数がnの場合は、rn < n + 1を使用してください。

関連する問題