1

Angry Birds ゲームを持っているとしましょう。

システム内の LTV で、前の月にマイティ イーグルの武器を購入したプレイヤーのうち、毎月「マイティ イーグル」の武器を購入しているプレイヤーの数を知りたい

各クライアントごとに購入したすべてのアイテムの日付があります。

私が実際に望んでいるのは、特定の当月の X<Y の組み合わせごとに、LTV_month_X から LTV_month_Y に移動したプレーヤーの割合を教えてくれる 2 次元マトリックスです。

例:

example_png (写真をインラインで配置できなかったので、リンクをクリックして写真を表示してください)

LTV_month_X to LTV_month_Y that LTV_month_Yここで、 SQL クエリと Excel ピボット テーブルを使用して、システム内の現在の月のアクティビティから実際に移動したプレーヤーの数を取得する方法を見つけました。

私が見つけようとしているのは、主に、その移行を実行できる可能性のある人の基本数を取得する方法です.

いくつかの定義: LTV_month_X = DATEDIFF(MONTH, first_eagle_month, specific_eagle_month)+1

できれば、 ANSI-SQLでソリューションを提供したいと考えています。そうでない場合は、MySQL または MSSQL を使用しますが、Oracle 関数はまったく使用しないでください

移行の 2 段階の計画も機能する可能性がある割合を探しているので、最初に潜在的なものを見つけ、実際に移動したものを見つけて、LTV_month_X から LTV_month_Y への保持を測定します。

最後の 1 つの問題: ステージ X から別のステージ Y (>X) に移動したクライアントの実際の ID を掘り下げて見つけることができるようにする必要があります。

4

2 に答える 2

1

ここでの LTV という用語の使用は明確ではありません。ユーザーの生涯を意味すると思います。

私が質問を理解した場合、あなたは、それぞれが 1 つ以上のイベントを持つエンティティのリストに基づいて、最後のイベントの月と 1 つ前のイベントの月でエンティティをグループ化 (カウントなど) する方法を尋ねています。

mysql では、変数を使用してそれを行うことができます。概念全体を説明するつもりはありませんが、基本的には、SELECT ステートメント内で @var:=column を記述すると、その変数にその列の値が割り当てられ、それを使用して連続する列間で値を比較できます。 LEAST(IF(@var=列,@same:=@same+1,@same:=0),@var:=列)

LEAST の使用は、実行順序を保証するためのトリックです。

于 2012-09-23T11:19:19.913 に答える
0

あなたが探している2つの次元は

  1. 実際の購入月
  2. 相対購入月

SELECT 
   player_id, 
   TRUNCATE(first_purchase,'MM') AS first_month , 
   TRUNCATE(current_purchase_date ,'MM') AS purchase_month, 
   months_between(current_purchase _date, first_purchase_date)+1 AS relative_month, 
   SUM(purchase_amount) AS total_purchase, 
   COUNT(DISTINCT player_id) AS player_count 
FROM ...  

購入月を相対月にピボットして集計できるようになりました

于 2012-10-03T14:16:34.710 に答える