0

顧客が過去 5 日間に以前に電話をかけた場合、その顧客からの電話を繰り返しとしてマークしようとしています。過去 5 日間に複数の電話がかかってきた場合は、それをカウントとして表示したいと考えています。静的な日付範囲に対してこれを行うことができますが、相対的な日付範囲に対して行う方法がわかりません。

顧客 ID と通話日がありますが、繰り返し回数列を追加したいと考えています。

顧客ID、通話日、リピート

453, 01-NOV-14, 0

453, 13-NOV-14, 0

351, 01-DEC-14, 0

453、15-NOV-14、1

441, 02-DEC-14, 0

102, 03-DEC-14, 0

453, 03-DEC-14, 0

441, 05-DEC-14, 1

453, 05-DEC-14, 1

453、06-DEC-14、2

ここで基本的に同じ質問への回答を見たことがありますが、それはクロス適用機能を使用していましたが、これは Oracle では利用できないと理解しています。 スライディングウィンドウを介して発生回数を保持するSQL

4

2 に答える 2

0
/*
WITH tab AS (
SELECT 453 CustomerID, to_date('01-11-14', 'dd-mm-yy') CallDate FROM dual
UNION ALL SELECT 453, to_date('13-11-14', 'dd-mm-yy') FROM dual
union all select 351, to_date('01-12-14', 'dd-mm-yy') FROM dual
UNION ALL SELECT 453, to_date('15-11-14', 'dd-mm-yy') FROM dual
union all select 441, to_date('02-12-14', 'dd-mm-yy') FROM dual
UNION ALL SELECT 102, to_date('03-12-14', 'dd-mm-yy') FROM dual
union all select 453, to_date('03-12-14', 'dd-mm-yy') FROM dual
UNION ALL SELECT 441, to_date('05-12-14', 'dd-mm-yy') FROM dual
union all select 453, to_date('05-12-14', 'dd-mm-yy') FROM dual
UNION ALL SELECT 453, to_date('06-12-14', 'dd-mm-yy') FROM dual
)
*/
SELECT CustomerID, CallDate, 
       count(CallDate) OVER(PARTITION BY CustomerID ORDER BY CallDate RANGE BETWEEN 5 PRECEDING AND CURRENT ROW) - 1 repeat_count
FROM tab order by 2;
于 2014-12-11T12:26:21.463 に答える