2

ブログ、質問と回答を検索すると、それらのほとんどは私の問題に関連しているように見えますが、私の質問に実際に答えることはありません. したがって、時間をかけて助けてくれた人に感謝します!

私は SQL Server 管理スタジオ 2008 R2 を使用しています。

クライアントの「平均再購入率」を比較したい。再購入率 (RPR) は、最初の注文日からの注文数として計算されます。

サンプルテーブル

  • CustomerID / OrderDate / VKR_Number
  • D10001 / 2013-01-04 / VKR-1
  • D10001 / 2013-05-01 / VKR-2
  • D10001 / 2013-05-11 / VKR-3
  • D10001 / 2013-08-01 / VKR-4

定義: 累積カウント (再購入): 最初の注文からの注文数。これは、合計注文数から 1 を引いたもの (つまり、最初の注文) に相当します。

再購入率 (RPR) : 累積回数 (再購入) / [時間間隔]

上記の表に RPR の例を示します。顧客 D10001 の累積 RPR は

  • カウント (VKR) = OrderDate = '2013-01-04' の最初の購入から 17 週間で 1
  • カウント (VKR) = 2 (注文日 = '2013-01-04' の最初の購入から 18 週間)
  • カウント (VKR) = 3 OrderDate = '2013-01-04' の最初の購入から 30 週間

最も単純なバージョン (少なくとも TSQL 素人向け) は次のようです。

`Select CustomerID,  COUNT([VKR_]) over (Partition by customer, DATEDIFF(week, Min([OrderDate ]), [OrderDate ])) as CountOfOrders, DATEDIFF(week, Min([OrderDate ]), [OrderDate ]) as WeeksPassedSinceDateOfFirstPurchase`

望ましい結果テーブルは次のようになります

  • CustomerID / WeeksPassedSinceDateOfFirstPurchase/ CountOfOrders
  • D10001 / 17 / 1
  • D10001 / 18 / 2
  • D10001 / 30 / 3

上記の要求を TSQL で実現するのが難しすぎる場合は、次のような結果テーブルを取得できれば幸いです。

  • CustomerID / WeeksPassedSinceDateOfFirstPurchase/ CountOfOrders
  • D10001 / 1 / 0
  • D10001 / 2 / 0
  • D10001 / 3 / 0
  • D10001 / 4 / 0
  • D10001 / 5 / 0
  • D10001 / 6 / 0
  • D10001 / 17 / 1
  • D10001 / 18 / 2
  • D10001 / 19 / 2
  • D10001 / 20 / 2
  • D10001 / 21 / 2
  • D10001 / 29 / 2
  • D10001 / 30 / 3

繰り返しますが、アドバイスをどうもありがとうございました! そして、ブログや回答を見逃していた場合は、すでに問題を解決していたことをお詫びします。

4

1 に答える 1

0

これはうまくいくはずです。

SELECT CustID
    ,DATEDIFF(ww,OrderDate,GETDATE()) 'WEEKS'
    ,(SELECT COUNT(1) 
       from Table t2 
       where t1.custID=t2.custID 
          and t2.OrderDate<=t1.OrderDate 
       GROUP BY t2.CustID)-1 as CountOrders
FROM TABLE t1
GROUP BY CustID,OrderDate
ORDER BY OrderDate

質問からは、平均が必要なようには見えません。カウント -1 だけが必要なようです。そうでない場合は、明確にしてください。これにより、要求した結果テーブルが得られます。2 番目と 3 番目の列を組み合わせて、1 週間あたりの平均注文数を求めることができます。

于 2013-09-23T11:51:44.667 に答える