0

4000 のアカウントのセットに対して、いくつかの基本的な顧客セグメンテーション/プロファイル分析を実行しようとしています。

使用状況と保有期間に基づいて顧客を簡単にセグメンテーションしたいと考えています。戦術的には、これは、特定の条件を満たす Acocunt_ID を Oracle SQL データベースに照会することを意味します。

たとえば、使用状況クエリは、先月の使用時間が 100 時間以上のアカウントのサブセットを返します。

このアカウントのリストを取得したら、別のプロファイリングの質問をしたいと思います。

たとえば、100 時間以上使用した顧客の場合、どの製品を使用したか? 彼らはどれくらいの期間顧客ですか?参照元は何でしたか?

私の基本的なアプローチは次のとおりです。

  1. 顧客セグメント クエリを実行する
  2. 各セグメントの accountIds を Excel にダウンロードする
  3. プロファイル クエリを作成する
  4. 以下の構造を使用して、顧客セグメントごとにプロファイル クエリを実行します。

    Select * From fooo
    where Account_ID in ('00001','00002','00003')
    

課題は、顧客セグメントのクエリが 1000 を超える結果を返すことです。そのため、account_ID の異なるバッチを 1000 のセットで手動で置き換える必要があります。これは、Oracle SQL の 1,000 式の制限のために必要です。

別の方法として、顧客セグメントのクエリをプロファイル クエリに結合することもできますが、これではクエリの実行に時間がかかります。

それで。問題は、顧客セグメントのクエリ結果をダンプし、それらの結果をプロファイル クエリにスローして、より効率的に実行できるようにするために使用できる、Oracle SQL で一時テーブルを作成および設定する効率的な方法があるかどうかです。

4

1 に答える 1

0

ROW_NUMBER()ウィンドウ集計関数を使用してAccountIDのASCENDING順序に基づいてRowIDを割り当て、WHERE句を使用してn個の行を処理します。

SELECT DT1.*
FROM (SELECT f1.*
           , ROW_NUMBER() OVER (ORDER BY F1.AccountID) AS RowID_
      FROM foo f1
     ) DT1
WHERE DT1.RowID_ BETWEEN 1 and /* n */
;
于 2012-08-19T03:00:29.813 に答える